ã¬ããŒãã§ã¯ããããå¯èœã«ããããã€ãã®ã¢ãããŒãã玹ä»ãããŠããŸãã XNUMX æ¥ã«æ°çŸäžä»¶ã® SQL ã¯ãšãªãçºçããå Žåã® SQL ã¯ãšãªã®ããã©ãŒãã³ã¹ãç£èŠãããç£èŠå¯Ÿè±¡ã® PostgreSQL ãµãŒããŒã¯æ°çŸå°ãããŸãã
ãã®ãããªå€§éã®æ å ±ãå¹ççã«åŠçã§ããæè¡ãœãªã¥ãŒã·ã§ã³ã¯äœã§ãããã?ãŸããããã«ãã£ãŠäžè¬ã®éçºè ã®äœæ¥ãã©ã®ããã«æ¥œã«ãªãã®ã§ãããã?
誰ãèå³ãæã£ãŠããŸãã? ç¹å®ã®åé¡ã®åæãšããŸããŸãªæé©åææ³ SQL ã¯ãšãªãš PostgreSQL ã§ã®å žåç㪠DBA ã®åé¡ã®è§£æ±º - ãŸãã
ç§ã®ååã¯ããªã«ã»ãããã³ãã§ãã代衚ãåããŸãã
ä»æ¥ã¯ãåäžã®ã¯ãšãªã®ããã©ãŒãã³ã¹ããåå¥ã«æœåºãããå¿ èŠããªããåé¡ããŸãšããŠè§£æ±ºããå Žåã«ãã¯ãšãªãæé©åããæ¹æ³ã«ã€ããŠèª¬æããŸãã äœçŸäžãã®ãªã¯ãšã¹ãããããããã€ããèŠã€ããå¿ èŠãããå Žå 解決ãžã®ã¢ãããŒã ãã®å€§ããªåé¡ã
äžè¬ã«ãXNUMX äžã®ã¯ã©ã€ã¢ã³ãã«ãšã£ãŠ Tensor ã¯æ¬¡ã®ãšããã§ãã
ãã¹ãŠãæ£åžžã«åäœããéçºã§ããããã«ããããã«ãåœç€Ÿã¯å šåœã« 10 ãæã®éçºã»ã³ã¿ãŒãèšããŠãããããã«å€ãã®éçºã»ã³ã¿ãŒãèšçœ®ããŠããŸãã 1000人ã®éçºè .
åœç€Ÿã¯ 2008 幎ãã PostgreSQL ã䜿çšããŠãããã¯ã©ã€ã¢ã³ã ããŒã¿ãçµ±èšããŒã¿ãåæããŒã¿ãå€éšæ å ±ã·ã¹ãã ããã®ããŒã¿ãªã©ãåŠçããããŒã¿ã倧éã«èç©ããŠããŸããã 400TB以äžã æ¬çªç°å¢ã ãã§ãçŽ 250 å°ã®ãµãŒããŒããããåèšã§çŽ 1000 å°ã®ããŒã¿ããŒã¹ ãµãŒããŒãç£èŠãããŠããŸãã
SQL ã¯å®£èšåèšèªã§ãã äœãããã©ã®ããã«ãæ©èœãããã§ã¯ãªãããäœããéæããããã説æããŸãã DBMS ã¯ãJOIN ã®äœææ¹æ³ãã€ãŸãããŒãã«ã®æ¥ç¶æ¹æ³ã課ãæ¡ä»¶ãã€ã³ããã¯ã¹ãééãããã®ãšééããªããã®ãããç¥ã£ãŠããŸãã
äžéšã® DBMS ã¯ãããããããã® XNUMX ã€ã®ããŒãã«ãããããã®ãã¥ãŒã«æ¥ç¶ããŠãã ããããšãããã³ããåãå ¥ããŸãããPostgreSQL ã§ã¯ãããã§ããŸããã ããã¯ãäž»èŠãªéçºè ã®æèçãªç«å Žã§ãããéçºè ã«äœããã®ãã³ãã䜿çšãããããããã¯ãšãª ãªããã£ãã€ã¶ãŒãå®æãããããšèããŠããŸããã
ããããPostgreSQL ã¯ãå€éšãã«ããèªèº«ã®å¶åŸ¡ãèš±å¯ããŠããªããšããäºå®ã«ãããããããå®å šã«èš±å¯ããŠããŸãã 圌ã®äžã§äœãèµ·ãã£ãŠãããèŠãŠã¿ãŸãããã¯ãšãªãå®è¡ãããšããšãã©ãã§åé¡ãçºçãããã
äžè¬ã«ãéçºè
(DBA ã«ãšã£ãŠ) ã¯éåžžãã©ã®ãããªå
žåçãªåé¡ã«çŽé¢ããŸãã? ãããã§ç§ãã¡ã¯ãã®èŠæ±ãæºãããŸããããããŠã ç§ãã¡ã«ãšã£ãŠã¯ãã¹ãŠãé
ãããã¹ãŠããã³ã°ã¢ããããŠããŸããäœããèµ·ãã£ãŠããŸã...äœããã®ãã©ãã«ãçºçããŠããŸã!ã
çç±ã¯ã»ãšãã©åžžã«åãã§ãã
- éå¹ççãªã¯ãšãªã¢ã«ãŽãªãºã
éçºè : ãä»ãJOIN çµç±ã§ SQL 㧠10 åã®ããŒãã«ã圌ã«äžããŠããŸã...ã - ãããŠã圌ã®æ¡ä»¶ãå¥è·¡çã«äºå®äžã解ãã»ããããããã¹ãŠãããã«ååŸã§ããããšãæåŸ ããŠããŸãã ããããå¥è·¡ã¯èµ·ãããããã®ãããªå€åæ§ã®ããã·ã¹ãã (10 ã€ã® FROM ã« XNUMX åã®ããŒãã«) ã§ã¯åžžã«äœããã®ãšã©ãŒãçºçããŸãã [èšäº ] - ç¡é¢ä¿ãªçµ±èš
ãã®ç¹ã¯ç¹ã« PostgreSQL ã«éåžžã«é¢é£ããŠããã倧èŠæš¡ãªããŒã¿ã»ããããµãŒããŒã«ã泚ããããªã¯ãšã¹ããè¡ããšãã¿ãã¬ããããã»ãã¯ã¹ããããŸãã æšæ¥ã¯ 10 件ã®ã¬ã³ãŒãããããä»æ¥ã¯ 10 äžä»¶ã®ã¬ã³ãŒãããããŸããããPostgreSQL ã¯ãŸã ãããèªèããŠããªããããPostgreSQL ã«ãããäŒããå¿ èŠããããŸãã [èšäº ] - ãªãœãŒã¹ã«ãæ¥ç¶ããã
ãã£ã¹ã¯ãã¡ã¢ãªãããã»ããµã®ããã©ãŒãã³ã¹ãååã§ãªã匱ããµãŒããŒã«ã倧èŠæš¡ã§è² è·ã®é«ãããŒã¿ããŒã¹ãã€ã³ã¹ããŒã«ããŸããã ããããã¹ãŠã§ã...ã©ããã«ããã©ãŒãã³ã¹ã®äžéãããããããè¶ ãããšãžã£ã³ãã§ããªããªããŸãã - ããããã³ã°
ããã¯é£ããç¹ã§ãããããŸããŸãªå€æŽã¯ãšãª (INSERTãUPDATEãDELETE) ã«æãé¢é£ããŠããŸããããã¯å¥ã®å€§ããªãããã¯ã§ãã
èšç»ãç«ãŠã
...ãã®ä»ãã¹ãŠã«ã€ããŠã¯ã èšç»ãå¿ èŠã§ãïŒ ãµãŒããŒå ã§äœãèµ·ãã£ãŠãããã確èªããå¿ èŠããããŸãã
PostgreSQL ã®ã¯ãšãªå®è¡ãã©ã³ã¯ãããã¹ãè¡šçŸã§ã®ã¯ãšãªå®è¡ã¢ã«ãŽãªãºã ã®ããªãŒã§ãã ãŸãã«ãã©ã³ããŒãåæããçµæãæãå¹æçã§ãããšå€æããã¢ã«ãŽãªãºã ã§ãã
åããªãŒ ããŒãã¯ãããŒãã«ãŸãã¯ã€ã³ããã¯ã¹ããã®ããŒã¿ã®ååŸãããããããã®æ§ç¯ãXNUMX ã€ã®ããŒãã«ã®çµåãçµåã亀差ããŸãã¯éžæã®é€å€ãªã©ã®æäœã§ãã ã¯ãšãªãå®è¡ããã«ã¯ããã®ããªãŒã®ããŒãããã©ãå¿ èŠããããŸãã
ã¯ãšãª ãã©ã³ãååŸããã«ã¯ã次ã®ã¹ããŒãã¡ã³ããå®è¡ããã®ãæãç°¡åãªæ¹æ³ã§ãã EXPLAIN
ã ãã¹ãŠã®å®éã®å±æ§ãååŸããã«ã¯ãã€ãŸãããŒã¹ã«å¯ŸããŠå®éã«ã¯ãšãªãå®è¡ããã«ã¯ - EXPLAIN (ANALYZE, BUFFERS) SELECT ...
.
æªãç¹: å®è¡ãããšããä»ãããã§å®è¡ããããããããŒã«ã« ãããã°ã«ã®ã¿é©ããŠããŸãã ããŒã¿å€æŽã®åŒ·ããããŒäžã«ããé«è² è·ã®ãµãŒããŒãäŸã«ãããšã次ã®ããã«ãªããŸãã ããã§ã¯å®è¡ãé ããªããŸãå€ ãªã¯ãšã¹ãã" XNUMX åãXNUMX æéåãå®è¡äžã«ãã®ãªã¯ãšã¹ãããã°ããååŸãããµãŒããŒã«æ»ããŠããéã«ãããŒã¿ã»ããå šäœãšçµ±èšãå€æŽãããŸããã ãããã°ã®ããã«å®è¡ãããšãããã«å®è¡ãããŸãã ãããŠãããªãã¯ãªãããªããç解ã§ããªãã®ã§ãã бÑлП ãã£ããã
ãªã¯ãšã¹ãããµãŒããŒäžã§å®è¡ãããç¬éã«äœãèµ·ãã£ãã®ããæ£ç¢ºã«ç解ããããã«ãè³¢ã人ã
ã¯æ¬¡ã®ããã«æžããŸããã
äžéšã®ãªã¯ãšã¹ããæå®ãããå¶éãè¶ ããŠå®è¡ãããŠããããšãå€æããå Žåã¯ãå®è¡ããŸãã ãã®ãªã¯ãšã¹ãã®èšç»ã®ãã¹ãããã·ã§ããããäœæãããããããŸãšããŠãã°ã«æžã蟌ã¿ãŸã.
ä»ã§ã¯ãã¹ãŠãããŸããã£ãŠããããã§ãããã°ã«è¡ãããããèŠãŠã¿ãŸã...[ããã¹ããããã¯ãã¹]ã ããããå®è¡ã« 11 ããªç§ããã£ããšããç¹ã§ã¯ããããåªããèšç»ã§ãããšããäºå®ä»¥å€ã«ã¯äœãèšããŸããã
ãã¹ãŠãããŸããã£ãŠããããã«èŠããŸãããå®éã«äœãèµ·ãã£ãã®ãã¯äœãæããã§ã¯ãããŸããã äžè¬çãªæé以å€ã«ã¯ãå®éã«ã¯äœãèŠããŸããã ãªããªãããã®ãããªãã¬ãŒã³ããã¹ãã®ãåçŸããèŠãããšã¯ãäžè¬ã«èŠèŠçã§ã¯ãªãããã§ãã
ãããããããæçœã§ãªããŠããäžäŸ¿ã§ãã£ãŠãããã£ãšæ ¹æ¬çãªåé¡ããããŸãã
- ããŒãã瀺ãã®ã¯ã ãµãããªãŒå šäœã®ãªãœãŒã¹ã®åèš åœŒã®äžã§ã ã€ãŸãããã®äžã«ãã¹ããããæ¡ä»¶ãããå Žåããã®ç¹å®ã®ã€ã³ããã¯ã¹ ã¹ãã£ã³ã«è²»ããããæéãåã«èª¿ã¹ãããšã¯ã§ããŸããã å éšã«ãåããæ¡ä»¶å€æ°ãCTE ããããã©ãããåçã«ç¢ºèªããããããã¹ãŠããå¿ã®äžã§ãå·®ãåŒãå¿ èŠããããŸãã
- XNUMXç¹ç®ïŒããŒãã«è¡šç€ºãããæå»ã¯ åäžããŒãã®å®è¡æéã ããšãã°ãããŒãã« ã¬ã³ãŒããè€æ°åã«ãŒãããçµæãšããŠãã®ããŒããå®è¡ãããå Žåããã©ã³å ã®ã«ãŒãæ° (ãã®ããŒãã®ãµã€ã¯ã«) ãå¢å ããŸãã ãã ããã¢ãããã¯å®è¡æéèªäœã¯èšç»äžåããŸãŸã§ãã ã€ãŸãããã®ããŒããåèšã§ã©ã®ãããã®æéå®è¡ãããããç解ããã«ã¯ãããäžåºŠãé ã®äžã§ãäœããæããå¿ èŠããããŸãã
ãã®ãããªç¶æ³ã§ã¯ãã誰ãæã匱ããªã³ã¯ãªã®ãïŒããç解ããŠãã ããã ã»ãŒäžå¯èœã§ããã ãã®ãããéçºè èªèº«ããããã¥ã¢ã«ãã«ããæžããŠããŸãã ãèšç»ãç解ããã«ã¯ãåŠç¿ããçµéšããªããã°ãªããªãæè¡ã§ã...ã.
ããããåœç€Ÿã«ã¯ 1000 人ã®éçºè ãããããã®çµéšãå人ã«äŒããããšã¯ã§ããŸããã ç§ããããªããã圌ãç¥ã£ãŠããŸãããåããã®èª°ãã¯ããç¥ããŸããã ãããã圌ã¯åŠã¶ã ããããåŠã°ãªããããããªããã圌ã¯ä»åãå¿ èŠããã - ãããŠåœŒã¯ã©ãã§ãã®çµéšãåŸãã®ã ããã?
èšç»ã®èŠèŠå
ãããã£ãŠããããã®åé¡ã«å¯ŸåŠããã«ã¯ã次ã®ããšãå¿
èŠã§ããããšã«æ°ã¥ããŸããã èšç»ãé©åã«èŠèŠåãã.
ç§ãã¡ã¯ãŸããåžå Žã調ã¹ãŠãã¿ãŸãããã€ã³ã¿ãŒãããã§äœãååšããã®ãèŠãŠã¿ãŸãããã
ããããå€ããå°ãªããéçºäžã®æ¯èŒçãã©ã€ãããªãœãªã¥ãŒã·ã§ã³ã¯ã»ãšãã©ãªãããšãå€æããŸãããæåéãã次㮠XNUMX ã€ã ãã§ãã
- ããŒãèªäœã®åŠçæé
- ãµãããªãŒå šäœã®åèšæé
- çµ±èšçã«äºæ³ããããååŸãããã¬ã³ãŒãã®æ°
- ããŒãæ¬äœèªäœ
ãã®ãµãŒãã¹ã«ã¯ããªã³ã¯ã®ã¢ãŒã«ã€ããå ±æããæ©èœããããŸãã ããªãã¯ããã«èªåã®èšç»ãæã蟌ã¿ãããèšããŸããããããããŽã¡ã·ã£ãããã«ãªã³ã¯ããããŸããããã«äœãåé¡ããããŸããã
ããããå°ããªåé¡ããããŸãã
ãŸããèšå€§ãªéã®ãã³ãããã 䞞倪ã®äžéšãåãåºããããã«çªãåºãã®ããäœåºŠãäœåºŠãç¹°ãè¿ããŸãã
第äºã«ã èªã¿åãããããŒã¿éã®åæã¯ãããŸãã â åºåããã®ãšåããããã¡ EXPLAIN (ANALYZE, BUFFERS)
ãããã§ã¯èŠãããŸããã 圌ã¯åã«ããããå解ããç解ããããããæ±ãæ¹æ³ãç¥ããŸããã 倧éã®ããŒã¿ãèªã¿åããšãã«ããã£ã¹ã¯ãšã¡ã¢ãª ãã£ãã·ã¥ã®å²ãåœãŠãééã£ãŠããå¯èœæ§ãããããšã«æ°ã¥ããå Žåããã®æ
å ±ã¯éåžžã«éèŠã§ãã
XNUMX çªç®ã®ãã€ãã¹ç¹ã¯ããã®ãããžã§ã¯ãã®å±éãéåžžã«åŒ±ãããšã§ãã ã³ãããã¯éåžžã«å°ãããXNUMX ãæã« XNUMX åçšåºŠãé©åã§ãã³ãŒã㯠Perl ã§ãã
ããããããã¯ãã¹ãŠãæè©ãã§ãããããã§äœãšããã£ãŠãããã®ã§ããããã®ãµãŒãã¹ãã倧ããé ããã£ãããšã XNUMX ã€ãããŸãã ãããã¯ãCommon Table Expression (CTE) ããã³ InitPlan/SubPlan ãªã©ã®ããŸããŸãªåçããŒãã®åæã«ããããšã©ãŒã§ãã
ãã®å³ãä¿¡ããã®ã§ããã°ãåã ã®ããŒãã®åèšå®è¡æéã¯ããªã¯ãšã¹ãå šäœã®åèšå®è¡æéãããé·ããšããããšã«ãªããŸãã ããã¯ç°¡åã§ã - ãã® CTE ã®çææé㯠CTE ã¹ãã£ã³ ããŒãããå·®ãåŒãããŸããã§ããã ãããã£ãŠãCTE ã¹ãã£ã³èªäœã«ããã£ãæéã«ã€ããŠã®æ£ç¢ºãªçãã¯ãã¯ãããããŸããã
ãã®åŸãèªåãã¡ã§ç¬èªã®ã³ãŒããäœæããææãæ¥ãããšã«æ°ã¥ããŸãããäžæ³ïŒ ãã¹ãŠã®éçºè
ã¯ããèšããŸãããä»åºŠã¯èªåãã¡ã§äœæããŸãããããšãŠãç°¡åã§ã!ã
ç§ãã¡ã¯ Web ãµãŒãã¹ã«å žåçãªã¹ã¿ãã¯ãæ¡çšããŸãããNode.js + Express ãããŒã¹ã«ããã³ã¢ã§ãçŸããå³ãäœæããããã« Bootstrap ãš D3.js ã䜿çšããŸããã ãããŠç§ãã¡ã®æåŸ ã¯å®å šã«çäžããæåã®ãããã¿ã€ãã 2 é±éã§åãåããŸããã
- ã«ã¹ã¿ã ãã©ã³ããŒãµãŒ
ã€ãŸããPostgreSQL ã«ãã£ãŠçæããããã©ã³ããä»»æã®ãã©ã³ã解æã§ããããã«ãªããŸããã - åçããŒãã®æ£ããåæ - CTE ã¹ãã£ã³ãInitPlanãSubPlan
- ãããã¡ãŒååžã®åæ - ããŒã¿ ããŒãžãã¡ã¢ãªããèªã¿åãããå ŽæãããŒã«ã« ãã£ãã·ã¥ããèªã¿åãããå Žæããã£ã¹ã¯ããèªã¿åãããå Žæ
- æ確ã«ãªã£ã
ããã¯ããã°ããã¹ãŠãæããã®ã§ã¯ãªããç»åå ã§ãæã匱ããªã³ã¯ããããã«ç¢ºèªã§ããããã«ããããã§ãã
æ§æã®åŒ·èª¿è¡šç€ºãå«ãŸããã次ã®ãããªçµæãåŸãããŸããã ããããéåžžãéçºè
ã¯èšç»ãå®å
šã«è¡šçŸãããã®ã§ã¯ãªããããçããã®ã䜿çšããŠããŸãã çµå±ã®ãšããããã§ã«ãã¹ãŠã®æ°å€ã解æããŠå·Šå³ã«æããŠãããäžå€®ã«ã¯ããããã©ã®ãããªçš®é¡ã®ããŒãã§ãããã瀺ãæåã®è¡ã ããæ®ãããŠããŸã: äœããã®ç¬Šå·ã«ãããšãCTE ã¹ãã£ã³ãCTE çæããŸã㯠Seq ã¹ãã£ã³ã
ããã¯ç§ãã¡ãåŒãã§ããçç¥è¡šçŸã§ã èšç»ãã³ãã¬ãŒã.
ä»ã«äŸ¿å©ãªãã®ã¯äœã§ããããïŒ åèšæéã®ã©ã®å²åãã©ã®ããŒãã«å²ãåœãŠãããŠãããã確èªãã暪ã«ã貌ãä»ãããã ãã§äŸ¿å©ã§ãã åã°ã©ã.
ããŒããæããŠèŠãŠã¿ããšãSeq Scan ã«ããã£ãæéã¯åèšã® 3 åã® 4 æªæºã§ãæ®ãã® XNUMX/XNUMX ã CTE Scan ã«ããã£ãŠããããšãããããŸããã ãã©ãŒïŒ ããã¯ãã¯ãšãªã§ CTE ã¹ãã£ã³ãç©æ¥µçã«äœ¿çšããå Žåã® CTE ã¹ãã£ã³ã®ãçºå°é床ãã«é¢ããå°ããªã¡ã¢ã§ãã ãããã¯ããã»ã©é«éã§ã¯ãããŸãããéåžžã®ããŒãã« ã¹ãã£ã³ãããå£ããŸãã
ããããéåžžããã®ãããªå³ã¯ãã»ã°ã¡ã³ããããã«ãã€ã³ãããŠãããšãã°ãåå以äžã®æéã§äžéšã® Seq Scan ããé£ã¹ããããšãããããšãããèå³æ·±ããããè€éã«ãªããŸãã ããã«ãå éšã«ã¯ããçš®ã®ãã£ã«ã¿ãŒããããããã«å¿ããŠå€ãã®ã¬ã³ãŒããç Žæ£ãããŸãã...ãã®åçãéçºè ã«çŽæ¥æããŠã次ã®ããã«èšãããšãã§ããŸãã èããŠã¿ãŠãã ãããäœããééã£ãŠããŸã!ã
åœç¶ã®ããšãªãããããã€ãã®ãçæããé¢ä¿ããŠããŸããã
ç§ãã¡ãæåã«ééããã®ã¯äžžãã®åé¡ã§ããã èšç»å ã®åã ã®ããŒãã®æé㯠1 ÎŒs ã®ç²ŸåºŠã§ç€ºãããŸãã ãããŠãããŒã ãµã€ã¯ã«æ°ããããšãã° 1000 ãè¶ ãããšãPostgreSQL ã®å®è¡åŸãã粟床ã®ç¯å²å ã§ãé€ç®ãããéç®ãããšåèšæéã¯ã0.95 ããªç§ãã 1.05 ããªç§ã®éãã«ãªããŸãã ã«ãŠã³ãããã€ã¯ãç§ã«éããå Žåã¯åé¡ãããŸãããããã§ã«[ããªç§]ã«ãªã£ãŠããå Žåã¯ãã誰ãã©ã®ãããæ¶è²»ããããèšç»ã®ããŒããããªãœãŒã¹ããåãé¢ãããšãã«ããã®æ å ±ãèæ ®ããå¿ èŠããããŸãã
2 çªç®ã®ãã€ã³ãã¯ãããè€éã§ãããåçããŒãéã§ã®ãªãœãŒã¹ (ãããã¡ãŒ) ã®åæ£ã§ãã ããã«ããããããã¿ã€ãã®æåã® 4 é±éã«å ããŠãããã« XNUMX é±éããããŸããã
ãã®çš®ã®åé¡ã¯éåžžã«ç°¡åã«çºçããŸããCTE ãå®è¡ãããã®äžã§äœããèªã¿åããšèããããŸãã å®éãPostgreSQL ã¯ãè³¢ããã®ã§ãããããçŽæ¥äœããèªã¿åãããšã¯ãããŸããã 次ã«ãããããæåã®ã¬ã³ãŒããååŸããããã«åã CTE ããã® XNUMX çªç®ã®ã¬ã³ãŒããååŸããŸãã
èšç»ãèŠãŠç解ããŸããå¥åŠãªããšã«ãSeq ã¹ãã£ã³ã§ 3 ã€ã®ãããã¡ (ããŒã¿ ããŒãž) ããæ¶è²»ããããCTE ã¹ãã£ã³ã§ããã« 1 ã€ã2 çªç®ã® CTE ã¹ãã£ã³ã§ããã« 6 ã€ããæ¶è²»ããããŠããŸãã ã€ãŸãããã¹ãŠãåçŽã«åèšãããš 3 ã«ãªããŸãããã¿ãã¬ãããã㯠XNUMX ããèªã¿åããŸããã CTE ã¹ãã£ã³ã¯ã©ãããã§ãäœãèªã¿åããŸããããããã»ã¹ ã¡ã¢ãªãçŽæ¥æäœããŸãã ã€ãŸããããã§ã¯æããã«äœããééã£ãŠããŸãã
å®éãããã« Seq Scan ããèŠæ±ããã 3 ããŒãžã®ããŒã¿ããã¹ãŠãããæåã® 1 ããŒãžã 1 åç®ã® CTE ã¹ãã£ã³ãèŠæ±ãã次㫠2 ããŒãžç®ããããŠããã« 2 ããŒãžãèªã¿åãããããšãããããŸããã 3 ããŒãžã§ã¯ãªã 6 ããŒãžãèªã¿åãããããŒã¿ã§ãã
ãããŠããã®å³ã¯ãèšç»ã®å®è¡ã¯ãã¯ãããªãŒã§ã¯ãªããåãªãããçš®ã®é埪ç°ã°ã©ãã§ãããšããç解ãç§ãã¡ã«ãããããŸããã ãããŠããããããäœãã©ãããæ¥ãã®ããããããããã«ããã®ãããªå³ãåŸãããŸããã ã€ãŸããããã§ã¯ pg_class ãã CTE ãäœæããããã 2 åèŠæ±ããŸãããã101 åç®ã®èŠæ±æã«ã»ãŒãã¹ãŠã®æéããã©ã³ãã«è²»ããããŸããã ã¿ãã¬ãããã 1 çªç®ã®ãšã³ããªãèªã¿åãããšã¯ãæåã®ãšã³ããªãåã«èªã¿åããããã¯ããã«ã³ã¹ãããããããšã¯æããã§ãã
ç§ãã¡ã¯ãã°ããæ¯ãåããŸããã 圌ãã¯èšããŸããïŒãããªãåã¯ã«ã³ããŒãç¥ã£ãŠãããïŒã ç§ãã¡ã®çµéšãããªãã®ç»é¢äžã«è¡šç€ºãããããã«ãªããŸããã ããã§äœ¿ããããã«ãªããŸãããã
ãã°ã®çµ±å
1000 人ã®éçºè ã¯å®å µã®ããæ¯ãã€ããŸããã ãããããæŠéããµãŒããŒã¯æ°çŸå°ãããªããéçºè åŽã®ãã®ãã³ããŒïŒããŒã¹ããã¯ãŸã£ãã䟿å©ã§ã¯ãªãããšãç§ãã¡ã¯ç解ããŠããŸããã ç§ãã¡ã¯ãããèªåãã¡ã§éããªããã°ãªããªãããšã«æ°ã¥ããŸããã
äžè¬ã«ãçµ±èšãåéã§ããæšæºã¢ãžã¥ãŒã«ããããŸããããããæ§æã§æå¹ã«ããå¿
èŠããããŸãã
ãŸããåãããŒã¿ããŒã¹å
ã®ç°ãªãã¹ããŒã ã䜿çšããŠåãã¯ãšãªã«å²ãåœãŠãŸãã ç°ãªãQueryIdã ã€ãŸããæåã«å®è¡ãããšã SET search_path = '01'; SELECT * FROM user LIMIT 1;
ãã㊠SET search_path = '02';
ãšåããªã¯ãšã¹ãã®å Žåããã®ã¢ãžã¥ãŒã«ã®çµ±èšã«ã¯ç°ãªãã¬ã³ãŒããå«ãŸããããšã«ãªããã¹ããŒã ãèæ
®ããã«ãç¹ã«ãã®ãªã¯ãšã¹ã ãããã¡ã€ã«ã®ã³ã³ããã¹ãã§äžè¬çãªçµ±èšãåéããããšã¯ã§ããŸããã
䜿çšã劚ãã XNUMX çªç®ã®ç¹ã¯ã èšç»ã®æ¬ åŠã ã€ãŸããèšç»ã¯ãªããèŠæ±èªäœãããã ãã§ãã äœãæžéããŠããã®ãã¯ããããŸãããããã®çç±ã¯ããããŸããã ããã§ãæ¥éã«å€åããããŒã¿ã»ããã®åé¡ã«æ»ããŸãã
ãããŠæåŸã®ç¬éââ ãäºå®ãã®æ¬ åŠã ã€ãŸããã¯ãšãªå®è¡ã®ç¹å®ã®ã€ã³ã¹ã¿ã³ã¹ã«å¯ŸåŠããããšã¯ã§ããŸãããååšããã®ã¯ãéèšãããçµ±èšã ãã§ãã ããã§äœæ¥ããããšã¯å¯èœã§ãããéåžžã«å°é£ã§ãã
ããã§ãã³ãããšæŠãããšã決æããæžãå§ããŸããã ã³ã¬ã¯ã¿ãŒ.
ã³ã¬ã¯ã¿ãŒã¯ SSH çµç±ã§æ¥ç¶ãã蚌ææžã䜿çšããŠãµãŒããŒãšããŒã¿ããŒã¹ãžã®å®å
šãªæ¥ç¶ã確ç«ããŸãã tail -F
ãã°ãã¡ã€ã«ã«ããã£ã€ããŠããŸããã ããã§ä»åã®ã»ãã·ã§ã³ã§ã¯ ãã°ãã¡ã€ã«å
šäœã®å®å
šãªããã©ãŒããååŸããŸããããµãŒããŒãçæããŸãã ãµãŒããŒã§ã¯äœã解æããããã©ãã£ãã¯ããã©ãŒãªã³ã°ããã ããªã®ã§ããµãŒããŒèªäœã®è² è·ã¯æå°éã§ãã
ãã§ã« Node.js ã§ã€ã³ã¿ãŒãã§ã€ã¹ã®äœæãéå§ããŠããã®ã§ãåŒãç¶ããã®äžã§ã³ã¬ã¯ã¿ãŒãäœæããŸããã ãããŠãJavaScript ã䜿çšããŠåŒ±ããã©ãŒãããã®ããã¹ã ããŒã¿ (ãã°) ãæäœããã®ãéåžžã«äŸ¿å©ã§ããããããã®ãã¯ãããžèªäœãæ£åœåãããŠããŸãã ãŸããããã¯ãšã³ã ãã©ãããã©ãŒã ãšããŠã® Node.js ã€ã³ãã©ã¹ãã©ã¯ãã£èªäœã«ããããããã¯ãŒã¯æ¥ç¶ãããã«ã¯ããããããŒã¿ ã¹ããªãŒã ãç°¡åãã€äŸ¿å©ã«æäœã§ããããã«ãªããŸãã
ãããã£ãŠã123 ã€ã®æ¥ç¶ããæ¡åŒµãããŸãã123 ã€ç®ã¯ãã°èªäœãããªãã¹ã³ãããŠèªåèªèº«ã«åã蟌ã¿ãXNUMX ã€ç®ã¯å®æçã«ããŒã¹ã«åãåãããŸãã ããããããã°ã«ã¯ oid XNUMX ã®èšå·ããããã¯ãããŠããããšã瀺ãããŠããŸããã ããããããã¯éçºè ã«ãšã£ãŠã¯äœã®æå³ããããŸãããããŒã¿ããŒã¹ã«ããããã OID = XNUMX ãšã¯äœã§ãã?ããšå°ããã®ãè¯ãã§ãããã ããã§ç§ãã¡ã¯èªåèªèº«ã«ã€ããŠãŸã ç¥ããªãããšãå®æçã«åºå°ã«å°ããŸãã
ãèæ
®ããŠããªãããšã 10 ã€ã ããããŸãããŸãŠã«äŒŒãããããã®äžçš®ããããšããããšã§ããã ç§ãã¡ã¯ãXNUMX å°ã®ãµãŒããŒãç£èŠããããšèãããšãã«ãã®ã·ã¹ãã ã®éçºãéå§ããŸããã ç§ãã¡ã®ç解ã®äžã§æãéèŠãªã®ã¯ã察åŠãé£ããããã€ãã®åé¡ãçºçããå Žåã§ãã ãããã第 XNUMX ååæã«ã¯ XNUMX 件ã®ã¢ãã¿ãªã³ã°ãè¡ãããŸãããã·ã¹ãã ãæ©èœãã誰ãããããæãã§ããã誰ããå¿«é©ã ã£ãããã§ãã
ããããã¹ãŠãåèšããå¿
èŠããããããŒã¿ ãããŒã¯å€§èŠæš¡ã§ã¢ã¯ãã£ãã§ãã å®éãç§ãã¡ãç£èŠããŠãããã®ã察åŠã§ãããã®ã¯ãç§ãã¡ã䜿çšããŠãããã®ã§ãã ããŒã¿ ã¹ãã¬ãŒãžãšã㊠PostgreSQL ã䜿çšããŠããŸãã ãããŠããªãã¬ãŒã¿ãŒã»ã©ããŒã¿ãã泚å
¥ãããã®ãéããã®ã¯ãããŸããã COPY
ãŸã ã
ããããåã«ããŒã¿ãã泚ããã ãã§ã¯ãå®éã«ã¯ç§ãã¡ã®ãã¯ãããžãŒã§ã¯ãããŸããã 50 å°ã®ãµãŒããŒã§ 100 ç§ãããçŽ 150 ã®ãªã¯ãšã¹ããããå ŽåãXNUMX æ¥ããã XNUMX ïœ XNUMX GB ã®ãã°ãçæãããããã§ãã ãããã£ãŠãããŒã¹ãæ éã«ãã«ãããããå¿ èŠããããŸããã
ãŸããç§ãã¡ããã£ãã®ã¯ã æ¥ããšã«åºåããªããªããæŠããŠãæ¥éã®çžé¢é¢ä¿ã«ã¯èª°ãèå³ããªãããã§ãã ä»å€ã¢ããªã±ãŒã·ã§ã³ã®æ°ããããŒãžã§ã³ãå ¬éããå ŽåããããŠãã§ã«ããã€ãã®æ°ããçµ±èšãå ¬éãããå Žåãæšæ¥ãšæ¯ã¹ãŠã©ã®ãããªéããçããã§ããããã
第äºã«ãç§ãã¡ã¯åŠãã ïŒåŒ·å¶ãããïŒ ã䜿çšããŠéåžžã«é«éã«æžãããšãã§ããŸã COPY
ã ã€ãŸããããã ãã§ã¯ãªãã COPY
圌ã¯ããéããã INSERT
ãããã«éããªããŸãã
XNUMX çªç®ã®ãã€ã³ã - ããªããã°ãªããªãã£ã ããããããªã¬ãŒãšå€éšããŒãæŸæ£ããŸãã ã€ãŸããåç
§æŽåæ§ããŸã£ãããããŸããã ãªããªããFK ã®ãã¢ãæã€ããŒãã«ããããããŒã¿ããŒã¹æ§é ã§ãããã«ãããšãã°ã¬ã³ãŒãã®ã°ã«ãŒãã«å¯Ÿã㊠FK ã«ãã£ãŠåç
§ããããã° ã¬ã³ãŒããããããšæå®ããå Žåããããæ¿å
¥ãããšãPostgreSQL ãããšã¯ãããã©ãåãæ¢ããŠæ£çŽã«å®è¡ãããã ãã SELECT 1 FROM master_fk1_table WHERE ...
æ¿å
¥ããããšããŠããèå¥åã䜿çšããŸããããã¯ããã®ã¬ã³ãŒããããã«ååšããããšãæ¿å
¥ã«ãã£ãŠãã®å€éšããŒããåæããããŠããªãããšã確èªããããã§ãã
ã¿ãŒã²ãã ããŒãã«ãšãã®ã€ã³ããã¯ã¹ã«å¯Ÿãã XNUMX ã€ã®ã¬ã³ãŒãã®ä»£ããã«ããããåç §ãããã¹ãŠã®ããŒãã«ããèªã¿åããšããè¿œå ã®å©ç¹ãåŸãããŸãã ããããããã¯ãŸã£ããå¿ èŠãããŸãããç§ãã¡ã®ä»äºã¯ãæå°éã®è² è·ã§ã§ããã ãå€ãã®å 容ãã§ããã ãæ©ãèšé²ããããšã§ãã ããã§FK - ããŠã³ïŒ
次ã®ãã€ã³ãã¯éçŽãšããã·ã¥ã§ãã æåã¯ããŒã¿ããŒã¹ã«å®è£ ããŸããããçµå±ã®ãšãããã¬ã³ãŒããå°çããããããçš®ã®ã¿ãã¬ããã§ããã«å®è¡ã§ããã®ã䟿å©ã§ãã ããªã¬ãŒã®ããè¿ãã«ããã©ã¹ XNUMXãã ããã¯äŸ¿å©ã§ãããåãããã«æªãç¹ããããŸããã¬ã³ãŒãã XNUMX ã€æ¿å ¥ããŠããå¥ã®ããŒãã«ããäœãä»ã®ãã®ãèªã¿æžãããªããã°ãªããªããšããããšã§ãã ãããããã èªã¿æžãããã ãã§ã¯ãªããæ¯åãããè¡ãã®ã§ãã
ããã§ãç¹å®ã®ãã¹ããééãããªã¯ãšã¹ãã®æ°ãåçŽã«ã«ãŠã³ãããããŒãã«ããããšæ³åããŠãã ããã +1, +1, +1, ..., +1
ã ãããŠãååãšããŠãããã¯å¿
èŠãããŸãã - ãã¹ãŠå¯èœã§ã ã³ã¬ã¯ã¿ãŒäžã®ã¡ã¢ãªå
ã®åèš äžåºŠã«ããŒã¿ããŒã¹ã«éä¿¡ããŸã +10
.
ã¯ããäœããã®åé¡ãçºçããå Žåãè«ççãªæŽåæ§ãã厩ãããå¯èœæ§ããããŸãããããã¯ã»ãšãã©éçŸå®çãªã±ãŒã¹ã§ããéåžžã®ãµãŒããŒããããã³ã³ãããŒã©ãŒã«ããããªãŒãããããã©ã³ã¶ã¯ã·ã§ã³ ãã°ããã°ãååšããããã§ãããã¡ã€ã« ã·ã¹ãã ... äžè¬çã«ãããã ãã®äŸ¡å€ã¯ãããŸããã ããªã¬ãŒ/FK ã®å®è¡ã«ãã£ãŠçããçç£æ§ã®æ倱ã¯ãçºçããã³ã¹ãã«èŠåã£ããã®ã§ã¯ãããŸããã
ããã·ã¥åãåæ§ã§ãã ãããªã¯ãšã¹ããé£ãã§ããŠãããŒã¿ããŒã¹å ã®ããããããèå¥åãèšç®ããŠããŒã¿ããŒã¹ã«æžã蟌ã¿ããããã¿ããªã«äŒããŸãã é²é³æã«ãåãããšãé²é³ããããšããå¥ã®äººãããªãã®ãšããã«æ¥ãŠãããã¯ããããŸã§ã¯ããã¹ãŠãããŸããããŸããããã¯ãã§ã«æªãããšã§ãã ãããã£ãŠãäžéšã® ID ã®çæã (ããŒã¿ããŒã¹ã«å¯ŸããŠ) ã¯ã©ã€ã¢ã³ãã«è»¢éã§ããå Žåã¯ããããå®è¡ããããšããå§ãããŸãã
ãªã¯ãšã¹ãããã©ã³ããã³ãã¬ãŒããªã©ã®ããã¹ããã MD5 ã䜿çšããã®ã¯ç§ãã¡ã«ãšã£ãŠå®ç§ã§ãããã³ã¬ã¯ã¿ãŒåŽã§ãããèšç®ããæ¢æã® ID ãããŒã¿ããŒã¹ã«ãæµã蟌ã¿ããŸãã MD5 ã®é·ããšæ¯æ¥ã®ããŒãã£ã·ã§ãã³ã°ã«ãããè¡çªã®å¯èœæ§ãå¿é ããå¿ èŠã¯ãããŸããã
ããããããããã¹ãŠãè¿
éã«èšé²ããã«ã¯ãèšé²æé èªäœãå€æŽããå¿
èŠããããŸããã
æ®æ®µã©ã®ããã«ããŒã¿ãæžã蟌ãã§ããŸãã? ããçš®ã®ããŒã¿ã»ãããããããããè€æ°ã®ããŒãã«ã«åå²ããŠã³ããŒããŸããæåã«æåã®ããŒãã«ã«ã次㫠XNUMX çªç®ã®ããŒãã«ã«ããã㊠XNUMX çªç®ã®ããŒãã«ã«ã³ããŒããŸããXNUMX ã€ã®ããŒã¿ ã¹ããªãŒã ã XNUMX ã€ã®ã¹ãããã§æžã蟌ãã§ãããããªã®ã§äžäŸ¿ã§ããé 次ã äžå¿«ã ãã£ãšæ©ãã§ããã§ããããïŒ ã§ããïŒ
ãããè¡ãã«ã¯ããããã®ãããŒãäºãã«äžŠè¡ããŠå解ããã ãã§ååã§ãã ãšã©ãŒããªã¯ãšã¹ãããã³ãã¬ãŒããããããã³ã°ãªã©ãå¥ã ã®ã¹ã¬ããã§çºçããŠããããããããã¹ãŠäžŠè¡ããŠæžããŠããããšãããããŸããã ããã§ååã§ã åã ã®ã¿ãŒã²ãã ããŒãã«ããšã« COPY ãã£ãã«ãåžžã«éãããŸãŸã«ãã.
ã€ãŸããã³ã¬ã¯ã¿ãŒã§ã¯ã åžžã«æµãããããããã«å¿
èŠãªããŒã¿ãæžã蟌ãããšãã§ããŸãã ãã ããããŒã¿ããŒã¹ããã®ããŒã¿ãèªèãã誰ãããã®ããŒã¿ãæžã蟌ãŸããã®ãåŸ
ã£ãŠç«ã¡åŸçããªãããã«ããããã«ã COPYã¯äžå®ééã§äžæããå¿
èŠãããã ç§ãã¡ã®å Žåãæãå¹æçãªæéã¯çŽ 100 ããªç§ã§ããããããéããŠãããã«åãããŒãã«ã«å床éããŸãã ãŸããããã€ãã®ããŒã¯æã« XNUMX ã€ã®ãããŒãäžè¶³ããå Žåã¯ãäžå®ã®å¶éãŸã§ããŒã«ããŸãã
ããã«ããã®ãããªè² è·ãããã¡ã€ã«ã®å Žåãã¬ã³ãŒãããããã§åéãããå Žåã®éèšã¯æªã§ããããšãããããŸããã å€å
žçãªæªã¯ã INSERT ... VALUES
ããã«1000件ã®ã¬ã³ãŒãã ãªããªãããã®æç¹ã§ã¡ãã£ã¢ãžã®æžã蟌ã¿ãããŒã¯ã«éãããã£ã¹ã¯ã«äœããæžã蟌ãããšããä»ã®äººã¯ãã¹ãŠåŸ
æ©ããããšã«ãªãããã§ãã
ãã®ãããªç°åžžãåãé€ãã«ã¯ãåã«äœãéçŽããªãã§ãã ããã ãŸã£ãããããã¡ãªã³ã°ããªãã§ãã ããã ãŸãããã£ã¹ã¯ãžã®ãããã¡ãªã³ã°ãçºçããå Žå㯠(幞ããªããšã«ãNode.js ã® Stream API ã䜿çšãããšããã確èªã§ããŸã)ããã®æ¥ç¶ã延æããŸãã åã³ç©ºãã€ãã³ããåä¿¡ããããèç©ããããã¥ãŒããæžã蟌ã¿ãŸãã ãããŠãããžãŒç¶æ ã®éã«ãããŒã«ãã次ã®ç©ºããŠãããã®ãåãåºããŠæžã蟌ã¿ãŸãã
ããŒã¿èšé²ã«ãã®ã¢ãããŒããå°å ¥ããåã¯ãçŽ 4K ã®æžã蟌ã¿æäœãããããã®æ¹æ³ã§è² è·ã 4 åã® 6 ã«åæžã§ããŸããã çŸåšã§ã¯ãæ°ããç£èŠå¯Ÿè±¡ããŒã¿ããŒã¹ã®ãããã§ããã« 100 åã«å¢å ããæ倧 3MB/ç§ãŸã§å¢å ããŸããã ãããŠçŸåšãéå» 10 ãæåã®ãã°ãçŽ 15 ïœ XNUMX TB ã®éã§ä¿åããŠãããéçºè ãããã XNUMX ãæ以å ã«ããããåé¡ã解決ã§ããããã«ãªãããšãæåŸ ããŠããŸãã
ç§ãã¡ã¯åé¡ãç解ããŠããŸã
ãããããã®ãã¹ãŠã®ããŒã¿ãåã«åéããã ãã§ã¯åªããŠãããæçšã§é¢é£æ§ããããŸãããååã§ã¯ãªãããšãç解ããå¿ èŠããããŸãã ãªããªããããã㯠XNUMX æ¥ã«äœçŸäžãã®ç°ãªãèšç»ãããããã§ãã
ããããäœçŸäžäººã管çããããšã¯äžå¯èœã§ããç§ãã¡ã¯ãŸããããå°èŠæš¡ãã«åãçµãå¿
èŠããããŸãã ãããŠãŸã第äžã«ããã®ãå°ããªããã®ãã©ã®ããã«æŽçãããã決ããå¿
èŠããããŸãã
ç§ãã¡ã¯ XNUMX ã€ã®éèŠãªãã€ã³ããç¹å®ããŸããã
- 誰ã ãã®ãªã¯ãšã¹ããéä¿¡ããŸãã
ã€ãŸããWeb ã€ã³ã¿ãŒãã§ã€ã¹ãããã¯ãšã³ããæ¯æãã·ã¹ãã ããŸãã¯ãã®ä»ã®ã¢ããªã±ãŒã·ã§ã³ãããå°çãããŸããã - ã©ã ããã¯èµ·ãã£ã
ç¹å®ã®ãµãŒããŒäžã§? ãªããªããXNUMX ã€ã®ã¢ããªã±ãŒã·ã§ã³ã®äžã«è€æ°ã®ãµãŒããŒãããããã®ãã¡ã® XNUMX ã€ãçªç¶ããããããªã£ããå Žå (ããã£ã¹ã¯ãè ã£ããããã¡ã¢ãª ãªãŒã¯ãããã®ä»ã®åé¡ãåå )ããã®ãµãŒããŒã«å ·äœçã«å¯ŸåŠããå¿ èŠãããããã§ãã - æ¹æ³ åé¡ã¯äœããã®åœ¢ã§æããã«ãªã£ã
ã誰ãããªã¯ãšã¹ããéä¿¡ããããç解ããããã«ãæšæºããŒã«ã䜿çšããŠã»ãã·ã§ã³å€æ°ãèšå®ããŸãã SET application_name = '{bl-host}:{bl-method}';
â ãªã¯ãšã¹ãã®éä¿¡å
ã®ããžãã¹ ããžã㯠ãã¹ãã®ååãšããªã¯ãšã¹ããéå§ããã¡ãœãããŸãã¯ã¢ããªã±ãŒã·ã§ã³ã®ååãéä¿¡ããŸãã
ãªã¯ãšã¹ãã®ãææè
ããæž¡ããåŸããªã¯ãšã¹ãããã°ã«åºåããå¿
èŠããããŸãããã®ããã«å€æ°ãèšå®ããŸãã log_line_prefix = ' %m [%p:%v] [%d] %r %a'
ã èå³ã®ãã人ã«ãšã£ãŠã¯ããããããã
- æé
- ããã»ã¹ãšãã©ã³ã¶ã¯ã·ã§ã³ã®èå¥å
- ããŒã¿ããŒã¹å
- ãã®ãªã¯ãšã¹ããéä¿¡ãã人ã®IP
- ãšã¡ãœããå
ãã®åŸãç°ãªããµãŒããŒéã® XNUMX ã€ã®ãªã¯ãšã¹ãã®çžé¢é¢ä¿ã調ã¹ãã®ã¯ããŸãé¢çœããªãããšã«æ°ã¥ããŸããã XNUMX ã€ã®ã¢ããªã±ãŒã·ã§ã³ããã¡ãã¡ã§åãããã«å€±æãããšããç¶æ³ã¯ãããŸããããŸããã ãã ããåãã§ãã£ãŠãããããã®ãµãŒããŒã®ãããããèŠãŠãã ããã
ããã§ããããã«ããã§ã ãXNUMX ãµãŒã㌠- XNUMX æ¥ã ããããåæã«ã¯ããã§ååã§ããããšãããããŸããã
æåã®åæã»ã¯ã·ã§ã³ã¯åãã§ã "ãµã³ãã«" - ãã¹ãŠã®æ°å€ææšãé€ãããèšç»ã®ç°¡ç¥åããã圢åŒã®ãã¬ãŒã³ããŒã·ã§ã³ã XNUMX çªç®ã®ã«ããã¯ã¢ããªã±ãŒã·ã§ã³ãŸãã¯ã¡ãœããã§ãXNUMX çªç®ã®ã«ããã¯åé¡ãåŒãèµ·ãããç¹å®ã®èšç»ããŒãã§ãã
ç¹å®ã®ã€ã³ã¹ã¿ã³ã¹ãããã³ãã¬ãŒãã«ç§»è¡ãããšã次㮠XNUMX ã€ã®å©ç¹ãåæã«åŸãããŸããã
- åæ察象ã®ãªããžã§ã¯ãæ°ã倧å¹
ã«åæž
ç§ãã¡ã¯ãã¯ãäœåãã®ã¯ãšãªãèšç»ã§ã¯ãªããæ°åã®ãã³ãã¬ãŒãã«ãã£ãŠåé¡ãåæããå¿ èŠããããŸãã - ã¿ã€ã ã©ã€ã³
ã€ãŸãããäºå®ããäžå®ã®ã»ã¯ã·ã§ã³å ã«ãŸãšããããšã§ããã®æ¥ã®æ§åã衚瀺ããããšãã§ããŸãã ããã§ãããçš®ã®ãã¿ãŒã³ããããšãã° XNUMX æéã« XNUMX åçºçãããããã㯠XNUMX æ¥ã« XNUMX åçºçããã¯ãã§ããå Žåãäœãåé¡ã ã£ãã®ãã誰ãåå ã§ããªãçºçããã®ããèããå¿ èŠãããããšãç解ã§ããŸãããããããããã¯ããã«ããã¯ãã§ãããããã¹ãã§ã¯ãããŸããã ããã¯ããã XNUMX ã€ã®éæ°å€çã§çŽç²ã«èŠèŠçãªåææ¹æ³ã§ãã
æ®ãã®æ¹æ³ã¯ãèšç»ããæœåºããææšã«åºã¥ããŠããŸããã€ãŸãããã®ãããªãã¿ãŒã³ãçºçããåæ°ãåèšæéãšå¹³åæéããã£ã¹ã¯ããèªã¿åãããããŒã¿ã®éãã¡ã¢ãªããèªã¿åãããããŒã¿ã®éãªã©ã§ãã
ããšãã°ããã¹ãã®åæããŒãžã«ã¢ã¯ã»ã¹ãããšããã£ã¹ã¯äžã§äœããéå°ã«èªã¿åããå§ããŠããŸãã ãµãŒããŒäžã®ãã£ã¹ã¯ã¯ãããåŠçã§ããŸããã誰ãããããèªã¿åãã®ã§ãããã?
ãããŠãä»»æã®åã§äžŠã¹æ¿ããŠãããã»ããµããã£ã¹ã¯ã®è² è·ããŸãã¯ãªã¯ãšã¹ãã®ç·æ°ãªã©ãä»äœãæ±ããã決ããããšãã§ããŸã...ç§ãã¡ã¯ããã䞊ã¹æ¿ãããäžäœãã®ãã®ãèŠãŠãä¿®æ£ããã¢ããªã±ãŒã·ã§ã³ã®æ°ããããŒãžã§ã³ãå
¬éããŸããã
ãããŠã次ã®ãããªãªã¯ãšã¹ãããåããã³ãã¬ãŒããä»å±ããããŸããŸãªã¢ããªã±ãŒã·ã§ã³ãããã«ç¢ºèªã§ããŸãã SELECT * FROM users WHERE login = 'Vasya'
ã ããã³ããšã³ããããã¯ãšã³ããåŠç...ãããŠããŠãŒã¶ãŒã察話ããŠããªãã®ã«ããªãåŠçããŠãŒã¶ãŒãèªã¿åãã®ãäžæè°ã«æããŸãã
éã®æ¹æ³ã¯ãã¢ããªã±ãŒã·ã§ã³ãããã®åäœãããã«ç¢ºèªããããšã§ãã ããšãã°ãããã³ããšã³ã㯠XNUMX æéã« XNUMX åãããããããããããããŠããã§ã (ã¿ã€ã ã©ã€ã³ã圹ã«ç«ã¡ãŸã)ã ãããŠããã«çåãçããŸããXNUMX æéã« XNUMX åäœããè¡ãã®ã¯ããã³ããšã³ãã®ä»äºã§ã¯ãªãããã§ã...
ãã°ããããŠãããéèšãäžè¶³ããŠããããšã«æ°ã¥ããŸããã ãã©ã³ããŒãããšã®çµ±èšã ããŒãã«èªäœã®ããŒã¿ãæäœãã (ã€ã³ããã¯ã¹ã«ããèªã¿åã/æžã蟌ã¿ã®æç¡ã«ããããã) ããŒãã®ã¿ããã©ã³ããåé¢ããŸããã å®éãåã®åçã«å¯ŸããŠè¿œå ãããç¹ã¯ XNUMX ã€ã ãã§ã - ãã®ããŒãã¯äœä»¶ã®ã¬ã³ãŒãããããããŸããã?ãããã³ç Žæ£ãããè¡ã®æ° (ãã£ã«ã¿ãŒã«ãã£ãŠåé€ãããè¡)ã
ãã¬ãŒãäžã«é©åãªã€ã³ããã¯ã¹ããªããããã«ãªã¯ãšã¹ããéä¿¡ãããšãã€ã³ããã¯ã¹ãéãéã㊠Seq Scan ã«èœã¡ãŸã...100 ã€ãé€ããã¹ãŠã®ã¬ã³ãŒãããã£ã«ã¿ãŒã§é€å€ããŸããã ãªã XNUMX æ¥ããã XNUMX å件ã®ãã£ã«ã¿ãŒæžã¿ã¬ã³ãŒããå¿ èŠãªã®ã§ãããã? ã€ã³ããã¯ã¹ãããŒã«ã¢ããããã»ããããã®ã§ã¯ãªãã§ãããã?
ãã¹ãŠã®èšç»ãããŒãããšã«åæããçµæãèšç»ã«ã¯çããããšæãããå
žåçãªæ§é ãããã€ãããããšãããããŸããã ãããŠãéçºè
ã«æ¬¡ã®ããã«äŒãããšããã§ãããããå人ãããã§ã¯ããŸãã€ã³ããã¯ã¹ã§èªã¿åãã次ã«äžŠã¹æ¿ãã次ã«åãåããŸããã - ååãšããŠãã¬ã³ãŒã㯠XNUMX ã€ãããŸãã
ã¯ãšãªãäœæãã人ãªã誰ã§ãããããããã®ãã¿ãŒã³ã«ééããããšããããŸã: ãVasya ã®æåŸã®æ³šæããã®æ¥ä»ãæããŠãã ãããã ãããŠãæ¥ä»ã«ããã€ã³ããã¯ã¹ããªãå ŽåããŸãã¯äœ¿çšããã€ã³ããã¯ã¹ã«æ¥ä»ããªãå Žåã¯ãå šãåããçæããèžã¿ãŸãã
ããããããããçæãã§ããããšã¯ããã£ãŠããŸãããããªããéçºè ã«äœããã¹ãããããã«æ瀺ããªãã®ã¯ãªãã§ããããã ãããã£ãŠãä»ãã©ã³ãéããšãéçºè ã¯ããã«ãã³ãä»ãã®çŸããåçãèŠãŠãããã¡ãã¡ã«åé¡ããããŸããããããã¯ããããŠè§£æ±ºãããŸãããšããã«äŒããŸãã
ãã®çµæãåé¡è§£æ±ºã«å¿ èŠãªçµéšå€ã¯åœåãšçŸåšã§ã¯å€§å¹ ã«æžå°ããŠããŸãã ãããç§ãã¡ãæã£ãŠããçš®é¡ã®ããŒã«ã§ãã
åºæïŒ habr.com