Vasily Lukyanchikovã«ããã¬ããŒãã®ãããã¯ã¯ãMySQLã§ã®ã€ã³ããã¯ã¹äœæãšEXPLAINã®é«åºŠãªæ©èœã§ãã ç§ãã¡ã®ä»äºã¯ã質åã«çããããšã§ããEXPLAINã§äœãèŠã€ããããšãã§ããŸãããäœã«æ³šæãæãã¹ãã§ããïŒ
EXPLAINã®å¶éã®å€ãã¯ãªããã£ãã€ã¶ãŒã«é¢é£ããŠããã®ã§ãäºåã«ã¢ãŒããã¯ãã£ã調ã¹ãŠãå¶éãã©ãããæ¥ãŠãååãšããŠEXPLAINã§äœãã§ããããç解ããŸãã
äžè¬çãªçè«ãšã¯å¯Ÿç §çã«ãMySQLã®ãã¥ã¢ã³ã¹ã«ã€ããŠã®ã¿ã€ã³ããã¯ã¹ãç°¡åã«èª¬æããŸãã
ãããã£ãŠãã¬ããŒãã¯3ã€ã®éšåã§æ§æãããŸãã
- ã¢ãŒããã¯ãã£;
- ã€ã³ããã¯ã¹äœæã®åºæ¬
- EXPLAINïŒäŸïŒã
ãŽã¡ã·ãªãŒã»ã«ã«ã³ãã³ãïŒã¹ã¿ããŽã¹ãïŒ
MySQLã¢ãŒããã¯ãã£
æŠç¥çã«ããµãŒããŒã¯æ¬¡ã®ããã«è¡šãããšãã§ããŸãã
æåã®ãããã¯ã¯ãéåžžãTCP / IPãŸãã¯UNIXãœã±ãããä»ããŠã察å¿ããã³ãã¯ã¿ãŸãã¯C APIã®æ©èœãä»ããŠãµãŒããŒã«ã¢ã¯ã»ã¹ããã¯ã©ã€ã¢ã³ãã§ãã æ¥ç¶å¶åŸ¡ãŠãããã«å°éããŸããå®éã«ã¯ãã¯ã©ã€ã¢ã³ãã¯ãã®æç¹ã§æ¿èªãããæ¿èªããã³å®è¡ããã»ã¹ãéå§ãããŸãã åã¯ã©ã€ã¢ã³ãã¯ãç¬èªã®ç¬ç«ãããããŒã§åäœããŸãã è¿œå ã®ã¹ã¬ããã¯ãµãŒããŒã«ãã£ãŠãã£ãã·ã¥ããã䜿çšãããŸãã
ã¯ãšãªãã£ãã·ã¥ã«ã€ããŠã¯ããã¹ãŠã®ã¯ã©ã€ã¢ã³ãã«å ±éã®1ã€ã®ã¹ã¬ããã§è¡šãããããšã«æ³šæããå¿ èŠããããŸãããã«ãã³ã¢ã¢ãŒããã¯ãã£ãšéåžžã«åçŽãªããŒã¿ããŒã¹ã¯ãšãªãããå Žåã¯ãããã«ããã¯ã«ãªãå¯èœæ§ããããŸãã ããŒã¿ããŒã¹ã¯ããããè¿ éã«å®è¡ããŸãããã£ãã·ã¥ã«ã¢ã¯ã»ã¹ããæéãããã«ããã¯ã«ãªãå¯èœæ§ããããŸãããããå¯äžã®ã¹ã¬ããã§ããã誰ãããã®ããã«äžŠãã§ããããã§ãã
æ¥ç¶ç®¡çã䜿çšãããšãèŠæ±ã¯ãããŒãµãŒããªããã£ãã€ã¶ãŒããšã°ãŒãã¥ãŒã¿ãŒã®3ã€ã®éšåã§æ§æãããã¡ã€ã³ãã€ãã©ã€ã³ã«å°éããŸãã å®éããã®éšåã¯åä¿¡ããSQLã¯ãšãªãããŒã¿éžæã«å€æããŸãã ãã®éšåã¯ãããããã®ã¿ã¹ã¯ã«åŸã£ãŠãã¹ãã¬ãŒãžã€ã³ã¿ãŒãã§ã€ã¹ãšéä¿¡ããŸãã
- ããŒãµãŒã¯ãèŠæ±ã®æ§æããã§ãã¯ããããŒãã«ããŒã¿ãšãã£ãŒã«ãã®å¯çšæ§ã«ã€ããŠã¹ãã¢ãç §äŒãããããã®ãã£ãŒã«ããžã®ã¢ã¯ã»ã¹æš©ãçŽæ¥ç §äŒããã¯ãšãªãã£ãã·ã¥å ã®å¿çã確èªããŠããã解æãããèŠæ±ããªããã£ãã€ã¶ãŒã«æž¡ããŸãã
- ãªããã£ãã€ã¶ãŒã¯ãã¹ãã¬ãŒãžã€ã³ã¿ãŒãã§ã€ã¹ã§ã€ã³ããã¯ã¹çµ±èšãèŠæ±ããããã«åºã¥ããŠãšã°ãŒãã¥ãŒã¿ãŒã«æž¡ãã¯ãšãªãã©ã³ãäœæããŸãã
- åä¿¡ããèšç»ã«åŸã£ãŠãè«è² æ¥è ã¯ãªããžããªå ã®ããŒã¿ã«çŽæ¥é©çšããã€ã³ã¿ãŒãã§ã€ã¹ãä»ããŠã¯ã©ã€ã¢ã³ãã«å¿çãéä¿¡ããå¿ èŠã«å¿ããŠæŽæ°ãã£ãã·ã¥ãå€æŽããŸãïŒçµæèªäœãŸãã¯æŽæ°ã®èŠæ±ããã£ãå Žåã¯ãŒãïŒã
ããã§ã¯ãMySQLã«é¢é£ããéèŠãªæ©èœã«æ³šæããå¿ èŠããããŸããããã¯æ¥ç¶ãããã¹ãã¬ãŒãžã€ã³ã¿ãŒãã§ã€ã¹ã§ãã äŒç€Ÿã§ç¬èªã®ã¹ãã¬ãŒãžïŒæšæºã€ã³ã¿ãŒãã§ã€ã¹ïŒãéçºããŠæ¥ç¶ã§ããŸãã ãããã£ãŠãããŸããŸãªãã¥ã¢ã³ã¹ãèæ ®ããŠãããŒã¿ãæã䟿å©ãªæ¹æ³ã§ä¿åã§ããŸãã
éã®æ©èœã¯ããªããã£ãã€ã¶ãŒããªããžããªãšéåžžã«åŒ±ãæ¥ç¶ãããŠããããã®ãªããžããªãŸãã¯ãã®ãªããžããªã«ãããªã¯ãšã¹ãã®äžéšã®å®è¡ã®åã ã®ãã¥ã¢ã³ã¹ãèªèãããèæ ®ããªãããšã§ãã ããã«ãããã¯å¥åŠãªããšã§ãããMySQLéçºè ã«ãã£ãŠçŽæ¥éçºãããã¡ã€ã³ãªããžããªã§ãã²ã©ãèµ·ãããŸãããã®ç¶æ³ã¯ææ°ããŒãžã§ã³ã§ã®ã¿æ¹åããå§ããŸããã ãã®ç¹ãèæ ®ããå¿ èŠããããŸãã
ãŸããMySQLã®ã€ã³ããã¯ã¹ã¯ã¹ãã¬ãŒãžã¬ãã«ã§æ£ç¢ºã«å®è£ ãããæšæºåãããŠããªãããšã«ã泚æããŠãã ããã ãããã£ãŠãã©ã®ã¿ã€ãã®ã€ã³ããã¯ã¹ïŒãã«ããã¹ããBããªãŒã空éãªã©ïŒã1ã€ãŸãã¯å¥ã®ã¹ãã¢ã§äœ¿çšãããŠããããç£èŠããå¿ èŠããããŸãã ãããŠæãéèŠãªããšïŒç°ãªããªããžããªã®åãã€ã³ããã¯ã¹-ããã¯å®å šã«ç°ãªãæ§é ã§ããå¯èœæ§ããããŸãã ããšãã°ãMyISAMã®BããªãŒã€ã³ããã¯ã¹ã«ã¯ããŒã¿èªäœãžã®ãã€ã³ã¿ãŒãæ ŒçŽãããInnoDBã«ã¯ãã©ã€ããªããŒãžã®ãã€ã³ã¿ãŒãæ ŒçŽãããŸãã MyISAMã¯ãã¬ãã£ãã¯ã¹ã€ã³ããã¯ã¹ãå§çž®ããŸãããInnoDBã¯å§çž®ããŸããããããŒã¿ãšã€ã³ããã¯ã¹ã®äž¡æ¹ããã£ãã·ã¥ããŸãã
äœæ¥äžã«èæ ®ããå¿ èŠãããå€ãã®ãã¥ã¢ã³ã¹ããããŸãã ããã¹ãã¬ãŒãžã§ã®å®è¡ãé«éãªãªã¯ãšã¹ããããã°ãå¥ã®ã¹ãã¬ãŒãžã§ã®ãªã¯ãšã¹ããé«éã§ãã çµ±èšã®ä¿åæ¹æ³ã¯ç°ãªããŸãã ããšãã°ãMyISAMã®å Žåã®ãªã¯ãšã¹ãã«ãŠã³ãïŒ*ïŒã¯ãããŒã¿èªäœã«ã¢ã¯ã»ã¹ããã«éåžžã«è¿ éã«å®è¡ã§ããŸãã çµ±èšã¯ã¡ã¿ããŒã¿ã«ä¿åãããŸããããã¯ç¹å¥ãªå Žåã«åœãŠã¯ãŸããŸãããããã§ããã®ãããªãã¥ã¢ã³ã¹ããããŸãã
ã¯ãšãªãã©ã³ã«ã€ããŠèšãã ãã§ãã ãªããã£ãã€ã¶ãŒãå®è¡ããŸããããã¯äœããã®å®è¡å¯èœã³ãŒãã§ã¯ãªãããšã°ãŒãã¥ãŒã¿ãŒã«æž¡ãäžé£ã®åœä»€ã§ãã ããã¯ããªã¯ãšã¹ãã®å®è¡æ¹æ³ã«é¢ããææ¡ã§ãã ãšã°ãŒãã¥ãŒã¿ãŒããªã¯ãšã¹ããè¡ã£ãåŸãããã€ãã®éããçŸããå ŽåããããPostgreSQLãšã¯ç°ãªããMySQLã¯äœãè¡ããããã衚瀺ããŸãããã€ãŸããMySQLã§EXPLAINãèŠããšãANALYZEããããŸããã ããæ£ç¢ºã«ã¯ãæè¿ããŒã¿çã§ããããã¡ãããŸã 䜿çšãããŠããªãMariaã®ããŒãžã§ã³10.1ã«ç»å ŽããŸããã ãããã£ãŠãMySQLã§EXPLAINãèŠããšãããããã¯ããã€ãã®ä»®å®ã§ããããšã«æ³šæããŠãã ããã
å€ãã®å Žåãåãèšç»ã§ãããããã©ãŒãã³ã¹ãç°ãªããããªç¶æ³ããããŸãã ããã§ãEXPLAINã®èŠ³ç¹ãããªããââã£ãã€ã¶èªäœãæäŸãããã®ã¯ã»ãšãã©ãªãããšã«æ³šæããŠãã ããã ããšãã°ãããŒãã«ããã¯ãšãªãéžæãïŒ*ïŒãããŒãã«ãããã£ãŒã«ãã®ãã¢ãéžæãããšåããã©ã³ã«ãªããŸããã1ã€ã®ã±ãŒã¹ã§ã¯åã¬ã³ãŒãã«æ°KBãéžæãããã1ã€ã®ã±ãŒã¹ã§ã¯å·šå€§ãªã¬ã³ãŒããããå Žåã¯æ°MBã«ãªãããšããããŸãã åœç¶ããããã®ãªã¯ãšã¹ãã®ããã©ãŒãã³ã¹ã¯æ¡éãã«ç°ãªããŸãããèšç»ã§ã¯ããã瀺ãããŸããã ãŸãã¯ãåããã©ã³ã1ã€ã®ã¯ãšãªããããŸãããç°ãªããã·ã³ã§ç°ãªãæ¹æ³ã§å®è¡ãããŸããããå Žåã«ã¯ã€ã³ããã¯ã¹ãã¡ã¢ãªããèªã¿åãããå¥ã®å Žåã«ã¯ãããã¡ãå°ããå Žåãã€ã³ããã¯ã¹ã¯ãã£ã¹ã¯ããååŸãããããã§ãã ç¹°ãè¿ããŸãããåãèšç»ã§ãããã©ãŒãã³ã¹ã¯ç°ãªããŸãã ãã®ãããEXPLAINã«å ããŠããŸããµãŒããŒãã©ã¡ãŒã¿ïŒshow statusïŒã§ããŸããŸãªããšã調ã¹ãå¿ èŠããããŸãã
ããã§éå»ã®RIT ++äŒè°ãåç §ããã®ãé©åã§ããããã§ã¯ãMySQLã®æ€ç©æ±ºå®èŠå ã«é¢ããGrigory Rubtsovã®å ±åããããŸãããããã«ã å€å žçãªæ€ç©ã®æ±ºå®èŠå ã®ããã«ãæ€ç©ã®å®çŸ©ãæ€çŽ¢ãããšãã圌ãã¯èã®æ°ã圢ãªã©ã«æ³šç®ããŸããã ãããŠçãã«æ¥ãŸããã ãã®ãããªæ§é ããããŸã-äžè²«ããŠèŠããå Žæãããã«ããã¯ãèŠã€ããããã«äœããã¹ããã
MySQLã®ã€ã³ããã¯ã¹ã«ç§»ããŸããã
ãã¹ãŠã®ã¿ã€ãã®ã€ã³ããã¯ã¹ãèæ ®ããŠãªã¹ãããããšã¯ããŸãã-åããŒã¿ããŒã¹ã®ã€ã³ããã¯ã¹ã¯å€ããå°ãªããæšæºã§ãã MySQLã«ã€ããŠèšãã°ã次ã®ç¹ã«æ³šæããå¿ èŠããããŸããMySQLã¯ãéè€ããã€ã³ããã¯ã¹ã管çããŸããã æ瀺ãããããã«ããŒãã«ãäœæããå Žåãå1ã«äžæã®ãã©ã€ããªã€ã³ããã¯ã¹ãäœæããããšãæå³ããŸãããããã¯ã1ã€ã®åã«3ã€ã®åäžã®ã€ã³ããã¯ã¹ãäœæããããšãæå³ããŸãã 3ã€ãã¹ãŠãã¹ããŒã¹ãå æããæŽæ°ããããªããã£ãã€ã¶ãŒã«ãã£ãŠèæ ®ãããŸããMySQLèªäœã¯èŠåãçºè¡ããŸããã èªåã§èŠãå¿ èŠããããŸãã
ã€ã³ããã¯ã¹ã«ã€ããŠã¯ïŒåºæ¬çã«ã¯ãbããªãŒãæããã䜿çšããŸãïŒã詳现ã«å ¥ããªãããã«ããŸãããªãŒãæç»ããªãããã«ãã¢ã«ãã¡ãããé ã®ã€ã³ããã¯ã¹ã®åœ¢åŒã§ã€ã³ããã¯ã¹ãè¡šãã®ãéåžžã«äŸ¿å©ã§ãã ããšãã°ãã¢ãã¬ã¹åž³ã¯ããŒãã«ã§ãããã¢ãã¬ã¹åž³ãžã®ã€ã³ããã¯ã¹ã¯ã€ã³ããã¯ã¹ã§ãã ãã®é¡æšã䜿çšããŠãã€ã³ããã¯ã¹ãã©ã®ããã«æ©èœããããæ³åã§ããŸããããŒã¿ãããéãéžæããããªã©ã§ããããããMySQLèªäœã«ã¯è¥å¹²ã®éãããããŸããMySQLã¯åžžã«ã€ã³ããã¯ã¹ã«æ²¿ã£ãŠé²ããããããã«ããçåãçããå ŽåããããŸãã
ããšãã°ãã¢ã«ãã¡ãããé ã®ã€ã³ããã¯ã¹ã§ããã€ãã®ååãèŠã€ããå¿ èŠãããå Žåã ãæãã§ã¯ã次ã®ããã«æ€çŽ¢ããŸããæåã®å§ãèŠãŠãå¿ èŠãªååãèŠã€ãã次ã®å§ãŸã§ã¹ã¯ããŒã«ããŸãã ããã¯ãbããªãŒããªãŒã®å¶éã§ã¯ãªããMySQLã§ã®bããªãŒããªãŒã®å®è£ ã®å¶éã§ãã ä»ã®ããŒã¿ããŒã¹ã¯ãããè¡ãããšãã§ããŸã-ããšãã°ãWHERE B = 3ã®å Žåãæåã®åã§ã¯ãªã䜿çšãããããäžè¬ã«MySQLã§ã€ã³ããã¯ã¹ã¯äœ¿çšãããŸããã ç¹å®ã®å Žåã«ã®ã¿ããã®åããæå°å€ãšæ倧å€ãèŠæ±ããŸãããããã¯ãããäŸå€ã§ãã
äžèšã®ã¹ã©ã€ãã§ã¯ãããŸããŸãªãªãã·ã§ã³ãæ瀺ãããŠããŸãããæåã®äžçåŒã§ã€ã³ããã¯ã¹ãéåããããšã«æ³šæããŠãã ããã æåã®äžçåŒãŸã§å·Šããå³ã«é çªã«äœ¿çšãããŸãã äžçåŒã®åŸãã€ã³ããã¯ã¹ã®ãã以éã®éšåã¯äœ¿çšãããªããªããŸãã ã€ãŸã æ¡ä»¶Aã§ã¯å®æ°ãBã¯ç¯å²ãæåã®2ã€ã®éšåã䜿çšãããŸãã 2çªç®ã®å Žåãã€ã³ããã¯ã¹å šäœã䜿çšãããŸãã 3çªç®ã®ã±ãŒã¹ã§ã¯ãã€ã³ããã¯ã¹ãå®å šã«äœ¿çšãããŸãã æ¡ä»¶å ã®å®æ°ã®é åºã¯éèŠã§ã¯ãªãããµãŒããŒã¯ããããåé 眮ã§ããŸãã B = 3ã®å Žåãäžè¬ã«ã€ã³ããã¯ã¹ã¯äœ¿çšãããŸããã å®æ°ããã³äžçåŒã®å Žåãã€ã³ããã¯ã¹ã¯æåã®2ã€ã®éšåã«ã®ã¿äœ¿çšãããã€ã³ããã¯ã¹ã¯3çªç®ã®éšåã«äœ¿çšã§ããŸããã ã±ãŒã¹A-å®æ°ã§ãæåŸã§ãœãŒããããšãæåã®éšåã§ã®ã¿ã€ã³ããã¯ã¹ã䜿çšãããŸãã2çªç®ã®éšåãã¹ãããããããããæåŸãã2çªç®ã®ã€ã³ããã¯ã¹ãå®å šã«äœ¿çšãããŸãã ãŸããåŸè ã®ããŒãžã§ã³ã§ã¯ãã€ã³ããã¯ã¹ã¯æåã®éšåã«ã®ã¿äœ¿çšãããŸããããã¯ãã€ã³ããã¯ã¹ããœãŒãããããã«äœ¿çšã§ããã®ã¯äžæ¹åã«éãããŠããããã§ãã
ããã¯ãMySQLã®è€åã€ã³ããã¯ã¹ã¯ãå®éã«ã¯ãããããçä¿¡åã®é£çµã«å¯Ÿããéåžžã®bããªãŒã€ã³ããã¯ã¹ã§ãããã¿ãã«å šäœã®æé ãŸãã¯éé ã§ç§»åã§ããããã§ãã ãããã£ãŠããBã®å¢å ãšCã®æžå°ã«åããŠããããšèšãããšã¯ã§ããŸããã ããã¯MySQLåºæã®å¶éã§ãã
ãã®ãããªãã¥ã¢ã³ã¹ããããŸãã ããšãã°ãïŒ0,1ïŒã®Aãš0ãš1ã®éã®Aã¯åçã®åœ¢åŒã§ãããããã¯ãã¡ããã¡ãã®ç¯å²ã§ããããã®ïŒ0,1ïŒã®Aããªã¹ãã®å Žåãããã§ã¯ãªããšç解ããŸãç¯å²ãããã³çåŒã®è€æ°æ¡ä»¶ã眮ãæããŸãã ãã®å Žåãã€ã³ããã¯ã¹ã䜿çšããŸãã ããã¯ãMySQLã®ãã1ã€ã®ãã¥ã¢ã³ã¹ã§ãã ãªã¹ããŸãã¯<>ã䜿çšããŠãèšè¿°æ¹æ³ãç£èŠããå¿ èŠããããŸãã 圌ã¯ãããåºå¥ããŸãã
åé·æ§æã«ã€ããŠã®ããã€ãã®èšèã ã€ã³ããã¯ã¹ïŒAïŒãšã€ã³ããã¯ã¹ïŒAãBïŒãããã°ãã€ã³ããã¯ã¹ïŒAãBïŒã®å Žåã¯ããŒãAã䜿çšã§ãããããã€ã³ããã¯ã¹ïŒAïŒã¯äžèŠã§ãã ãããã£ãŠãåé·ãªã€ã³ããã¯ã¹ããªãããšã確èªããèªåã§åé€ããå¿ èŠããããŸãã æããã«ãããã¯äž¡æ¹ã®ã€ã³ããã¯ã¹ãbããªãŒã§ããå Žåã«ãåœãŠã¯ãŸããŸãããããšãã°ã€ã³ããã¯ã¹ïŒAïŒããã«ããã¹ãã®å Žåããã¡ããå¿ èŠãªå ŽåããããŸãã
ãªã¹ãã®ãã¥ã¢ã³ã¹ã«æ»ããŸãããã ããã§ãããåºãã€ã³ããã¯ã¹ãäžæã«ããããšãã§ããŸãã ããšãã°ãã€ã³ããã¯ã¹ïŒAãBïŒãäœæããå ŽåãåçŽã«æ¡ä»¶Bã䜿çšããŸããããå¯èœæ§ã®ããå°ããªãªã¹ããªãã·ã§ã³ãããå Žåã¯ãäžè¶³ããŠããæ¡ä»¶ãç¬èªã«çœ®ãæããããã«ã¢ããªã±ãŒã·ã§ã³ã§äœæã§ããŸãã ãããããã®æšå¥šäºé ã§ã¯ããªã¹ããååšããå Žåãã€ã³ããã¯ã¹ã®ãããªã䜿çšãç Žæ£ãããªããšããäºå®ã«ããããããããœãŒãã«äœ¿çšã§ããªããããéåžžã«æ³šæããå¿ èŠããããŸãã å¹³çã®ããã ãã«ã ãããã£ãŠã䞊ã¹æ¿ãèŠæ±ãããå Žåã䞊ã¹æ¿ãã䜿çšããããã«ãªã¹ããååšããªãããã«ããã¹ãŠãçµåããŠèŠæ±ãåæ§ç¯ããå¿ èŠããããŸãã åœç¶ãããã¯åžžã«å¯èœãšã¯éãããåžžã«äŸ¿å©ãšã¯éããŸããã ããšãã°ãã€ã³ããã¯ã¹ã®æ¡åŒµåã«ãã£ãŠã€ã³ããã¯ã¹ã«ããŒãäœæã§ããå ŽåïŒã¯ãšãªã§éžæããã³äœ¿çšããããã¹ãŠã®ãã£ãŒã«ããã€ã³ããã¯ã¹ã«ååšããããšãæå³ããŸãïŒããµãŒããŒã¯ããŒã¿ã®ããŒãã«ã«ç»ãå¿ èŠããªãããšãç解ããèŠæ±ããŸãã€ã³ããã¯ã¹ã«çµæã圢æããŸãã ãªããªã ã€ã³ããã¯ã¹ã¯ããåçåãããã³ã³ãã¯ãã§ãã»ãšãã©ã®å Žåãã£ãã·ã¥ãããã¡ã¢ãªã«ä¿åãããŸããããã¯ãã䟿å©ã§ãã ãããã£ãŠãã€ã³ããã¯ã¹ãã³ã³ãã€ã«ãããšãã¯ãã¯ãšãªã®ã«ããŒã€ã³ããã¯ã¹ãäœããã®æ¹æ³ã§éžæã§ãããã©ãããåžžã«ç¢ºèªããŸãã
ããã«ãã€ã³ããã¯ã¹ã䜿çšããªãå Žåãæ€èšããŸãã
ä»ã®ããŒã¿ããŒã¹ã«ã¯å ±éã®åŸ®åŠãªéãããããŸããããšãã°ãPostgreSQLã®ããã«ã€ã³ããã¯ã¹ãåŒã®äžéšã§ããå Žåãå€æã§ããŸããããããã£ãŠãã¯ãšãªã«id + 1 = 3ãããå Žåãidã®ã€ã³ããã¯ã¹ã¯äœ¿çšãããŸããã ç§ãã¡ã¯èªåã§ãããè² æ ããªããã°ãªããŸããã ã€ã³ããã¯ã¹ãåŒã®äžéšã§ããå Žåãã€ã³ããã¯ã¹ãæ瀺çã«é€å€ã§ããããã«å€æã§ãããã©ããã確èªããå¿ èŠããããŸãã
åæ§ã«ãå€æãå®è¡ããªããšããäºå®ã®ããïŒæ°åŠçãªã ãã§ãªãããšã³ã³ãŒãã®äžäžèŽãåå€æãªã©ïŒãã€ã³ããã¯ã¹ã䜿çšãããŸããã ãµãã£ãã¯ã¹æ€çŽ¢ãé²è¡äžã®å Žåãæåã®éšåãã¹ãããããããšããã€ã³ããã¯ã¹ã¯äœ¿çšãããŸããã ãã¡ãããåæ§ã®ããŒãã«ã®ãã£ãŒã«ããšæ¯èŒããå Žåãã€ã³ããã¯ã¹ã¯äœ¿çšãããŸããããã®å Žåãæ¯èŒããããã«æåã«ããŒãã«ããã¬ã³ãŒããèªã¿åãå¿ èŠãããããã§ãã
ãã®åã«ãã€ã³ããã¯ã¹ãã«ããŒããããšãšãããããã©ã®ããã«åªããŠãããã«ã€ããŠèšåããŸããã ã¢ãŒããã¯ãã£ã¹ã©ã€ãã«æ»ãïŒ
ããã¯æ¬¡ã®ããã«çºçããŸããè«è² æ¥è ã¯ãåºèã«ããŒã¿ïŒWHEREæ¡ä»¶ïŒãããããèŠæ±ããŸããè€æ°ã®ããžã·ã§ã³ã«WHEREæ¡ä»¶ãããå Žåããããã¯ãã¹ãŠåºèå ã§åŠçã§ããŸãã ãããæé©ãªãªãã·ã§ã³ã§ãã æ¡ä»¶ã®äžéšãã€ã³ããã¯ã¹ã«ãã£ãŠã¹ãã¬ãŒãžã¬ãã«ã§åŠçããããµãŒããŒãã¬ãã«ã¢ããã«æž¡ãããè¡ãé©çšãããã以äžã®æ¡ä»¶ãç Žæ£ãããªãã·ã§ã³ããããŸãã æããã«ãããã¯é ããªããŸãããªããªã ã¬ã³ãŒãèªäœããªããžããªããå®è¡è ã«è»¢éãããŸãã ãããã£ãŠãã€ã³ããã¯ã¹ãã«ããŒããããšã¯ãã¯ãšãªå ã®ãã£ãŒã«ãã«ã®ã¿é©çšããå Žåãããæçã§ãããªããªãã ãã§ã«ããå°ãªãè¡ãéžæããŠããŸãã
ããã§ãããšãã°ãã€ã³ããã¯ã¹æ¡ä»¶ããã·ã¥ããŠã³ãšåŒã°ããåæ§ã®æé©åïŒ
次ã®æå³ã§ãã AãBãCã®3ã€ã®ãã£ãŒã«ãã«ã€ã³ããã¯ã¹ããããŸãããã®ãããªæ¡ä»¶äžã§ã¯ãæåã®ãã£ãŒã«ãã®äžéšã®ã¿ã䜿çšã§ããŸãã ãªããžããªèªäœã®ã€ã³ããã¯ã¹ããã§ãã¯ã§ããããã«æããŸããã以åïŒMySQL 5.6ãMariaDB 5.3ããåïŒã¯ãµãŒããŒããããå®è¡ããŠããªãã£ããããç¹å®ã®ãªãªãŒã¹ïŒãµãŒããŒãå®è¡ã§ããããšïŒã泚ææ·±ã調ã¹ãå¿ èŠããããŸãã æ°ããããŒãžã§ã³ã§ã¯ããµãŒããŒã¯åAã®ã¿ã§ã€ã³ããã¯ã¹ã®æåã®éšåãæ€çŽ¢ããããŒã¿ãéžæããŸããã¬ã³ãŒãããšã°ãŒãã¥ãŒã¿ãŒã«éä¿¡ããåã«ã2çªç®ãš3çªç®ã®éšåã®æ¡ä»¶ã確èªããã¬ã³ãŒãå šäœãéžæãããã©ããã確èªããŸãã ããã«ããããã£ã¹ã¯ããèªã¿åãå¿ èŠãããã¬ã³ãŒãã®æ°ãèªç¶ã«æžå°ããŸãã
InnoDBã®äž»èŠãªæ©èœã¯ãã»ã«ã³ããªããŒããã©ã€ããªããŒãåç §ãããããå®éã«ã¯InnoDBã®ã»ã«ã³ããªããŒã¯ã»ã«ã³ããªããŒ+ãã©ã€ããªããŒãžã®ãã€ã³ã¿ã§ãã
ãã®ãããªé·ãã€ã³ããã¯ã¹ã«ã¯ç®ã«èŠããªãå°ŸããããŸãã ãªããã£ãã€ã¶ãŒãã¢ã¯ã·ã§ã³ã§ãããèæ ®ããªãã£ããšããæå³ã§ç®ã«èŠããŸããã
ãããã£ãŠããã©ã€ããªïŒAãBïŒã³ã³ããžãããã»ã«ã³ããªããŒããããŸã-ããã¯ïŒCãAãBïŒã®ã³ã³ããžããããŒã«ãªããæ¢ã«æ€çŽ¢ã§ããŸãã
ãããã£ãŠãInnoDBããŒãã«ã䜿çšããŠã€ã³ããã¯ã¹ãäœæããå Žåããã¹ãŠã®ã€ã³ããã¯ã¹ã«è¿œå ãããããã䜿çšããã¯ãšãªã«å¿ããŠãé·ããã©ã€ããªããŒãè¯ããæªãããåžžã«èæ ®ããå¿ èŠããããŸãã
次ã®èŠåããããŸã-ãã®æé©åã¯ãæååã®ãã£ã«ã¿ãªã³ã°ã«ã€ããŠã®ã¿èæ ®ãããŸãã ã»ã«ã³ããªããŒã®å€ã®ã¿ããœãŒãããã圢åŒã§ä¿åããããã©ã€ããªããŒãžã®ãã€ã³ã¿ã¯ãœãŒããããªãããããµãŒããŒã¯çããæååãã£ã«ã¿ãªã³ã°ã®æ¡ä»¶ã«ã®ã¿ãã®ãããªé·ãèŠããªããããŒã«ãã䜿çšã§ããŸãã MariaDB 5.5ãMySQL 5.6ã§å©çšå¯èœã§ãã
ãªããã£ãã€ã¶ãŒã®äž»ãªå¶éã¯ãæŽå²çã«ã»ãšãã©çµ±èšã䜿çšããªãããšã§ãã ãªããžããªããã®ããŒã¿ãèŠæ±ããŸãã ããã§ããµãŒããŒãèæ ®ã«å ¥ãããã®ããã詳现ã«ç€ºããŸãã
å ¥åã³ãã³ãããã£ãŒã«ããè¡æ°ã®çµæãèæ ®ããããšãã§ããŸãã 倧éã®ããŒã¿ã ç¹åŸŽã¯ãæåã«çµ±èšã次ã®ããã«èšç®ãããããšã§ãïŒãµãŒããŒãèµ·åããããäœããã®ALTERã³ãã³ããäœæããçµ±èšãæŽæ°ããŸãããã®åŸãããŒãã«ããã°ããã®éåç¶ããããã»ã¹ãçªç¶å€åããçµ±èšãåã³æŽæ°ãããŸãã ã€ãŸã çµ±èšèªäœãããŒã¿ã®ååžã«å¯Ÿå¿ããªãããšãèµ·ãããŸãã
ç¹°ãè¿ããŸãããåã¹ãã¢ã¯ç¬èªã®æ¹æ³ã§çµ±èšãéžæããŸãã ææ°ããŒãžã§ã³ã§ã¯ãç¬ç«ããçµ±èšãã€ãŸã ãµãŒããŒã¬ãã«ã§ã®çµ±èš-ãµãŒãã¹ããŒãã«ãå²ãåœãŠãããPercona 5.6ã®å Žåãã¹ãã¬ãŒãžã¡ã«ããºã ã«é¢ä¿ãªãããã¹ãŠã®ããŒãã«ã®çµ±èšãçµ±äžãããæ¹æ³ã§åéãããŸãã ããã¯InnoDBã®ã€ã³ããã¯ã¹ã«å¯ŸããŠã®ã¿è¡ãããŸããMaria10ã§ã¯ãã€ã³ããã¯ã¹åãããŠããªãåã«ã€ããŠãããã«åéããããŒã¿ã®ååžãããããç解ããŠããããããªããã£ãã€ã¶ãŒã¯ããæé©ãªå®è¡ãã©ã³ãéžæã§ããŸãã
ãªããã£ãã€ã¶ãŒã¯ãªããžããªã®æ©èœãèæ ®ããŸããããªã¯ãšã¹ãããªããžããªã«è»¢éãããšãInnoDBãã»ã«ã³ããªããŒãããé·ãæ€çŽ¢ããããšã¯æããã§ããã»ã«ã³ããªããŒã調ã¹ããã©ã€ããªããŒãžã®ãã€ã³ã¿ãååŸãããããã®ãã€ã³ã¿ãååŸããããŒã¿ãååŸããããã§ããã€ãŸã ããã«ãã¹ã䜿çšããŸããããšãã°ãMyISAMã§ã¯ãè¡èªäœãçŽæ¥æããã€ã³ã¿ãŒãããã«ååšããŸãã ãªããã£ãã€ã¶ãŒã¯ããããã®éšåãŸãã¯ãããã®éšåã®çžå¯Ÿçãªé床ã®åæ§ã®ãã¥ã¢ã³ã¹ãèæ ®ããŸããïŒèŠæ±ã¯ç°ãªããªããžããªãŒã«åæã«é©çšã§ããŸãïŒã ãŸããæ©åšã«é¢é£ããå€ãã®åé¡ãèæ ®ããŠããŸããã ãã£ãã·ã¥ããããŒã¿ããããã¡...
ã¡ããªãã¯ã ãªããã£ãã€ã¶ãŒãæãå®ããã©ã³ãéžæããããšã¯æããã§ããããªããã£ãã€ã¶ãŒã®èŠ³ç¹ããèŠããšãæãå®ããã©ã³ã¯æãã³ã¹ãã®äœããã©ã³ã§ãããã³ã¹ãã®åé¡ã¯ãããã«é¢ããç§ãã¡ã®èããšäžèŽããªãæ £ç¿ã§ãã ç¹°ãè¿ããŸãããéžæã®é£ããã¯ãããŒãã«ãããããããããããã移åããŠç°ãªãæ¹æ³ã§èŠãå¿ èŠãããå Žåã§ãã
圌ã¯ãŸããã«ãŒã«ã䜿çšããŠããŸãã ããšãã°ããã«ããã¹ãã€ã³ããã¯ã¹ã䜿çšããå¿ èŠãããããšãç解ããŠããå Žåã¯ãäž»ããŒã«1ã€ã®åãæ確ã«çæããæ¡ä»¶ãããå Žåã§ããããã䜿çšããŸãã
ãŸã ãã®ãããªãã¥ã¢ã³ã¹ããããŸã-ãããã®2ã€ã®ãšã³ããªã¯ãç§ãã¡ã®èŠ³ç¹ããã¯åçã§ãïŒ
ããã§ã1ãš4ã®é
ããã§ãa> 0ããã³a <5
ããããMySQLãµãŒããŒã®èŠ³ç¹ããã¯ããããã a> 0ããã³a <0ã®å Žåã圌ã¯ç¯å²æ€çŽ¢ã䜿çšãããbetweenããéããŠåããã®ãèšè¿°ããå Žåãããããªã¹ãã«å€æããè€æ°ã®çåŒã®æ¡ä»¶ã䜿çšã§ããŸãã
ãã®ãããªãã¥ã¢ã³ã¹ã§ã¯ãåžžèã«åºã¥ããŠã¯ãšãªãäœæããããšã¯ã§ããŸããããäžæ¹ã§ãMySQLãæé©åããããã«ç¹å¥ã«èšç·Žããã人ã ã®éèŠãå¢ãããšããç¹ã§äŸ¿å©ã§ãã :)
ãªããã£ãã€ã¶ãŒã®ä»çµã¿ã«ã€ããŠç°¡åã«èª¬æããŸã
èªææ§ã®èŠæ±ããã§ãã¯ããŸãã äžè¬ã«ã圌ã¯ã€ã³ããã¯ã¹çµ±èšã®ã¿ã«åºã¥ããŠãªã¯ãšã¹ããè¡ãããšãã§ããŸãã IDåã«è² ã®å€ïŒæ£ã®å€ïŒãèŠæ±ããŠããã®ãããããŸããã ãã®åŸã圌ã¯ããã«ç§ãã¡ãç¯å²å€ã§èŠæ±ããŠããããšãç解ããŸãã ããã¯ããã©ãŒãã³ã¹ã®ç¹ã§éåžžã«å¹æçãªãªãã·ã§ã³ã§ããæãå®ããã©ã³ãéžæããŸãã
ãªããã£ãã€ã¶ãŒã¯ã»ãšãã©äœãã§ããªãããã«èŠããŸãããå®éã«ã¯ããŸããŸãªææ³ã䜿çšããŠã¯ãšãªãæ°åŠçã«å€æããŸããããšãã°ããµãã¯ãšãªã¯å€ãããŒãžã§ã³ã®ããã«äœäžââããããç¬ç«ããäŸåé¢ä¿ã«ãªã£ãããæ°ãããã®ã®ããã«æ¹åãããããå¯èœæ§ããããŸãã ãã¯ããã¯ã®ãªã¹ãã¯éåžžã«é·ãã§ãã
ããã¯ãMariaDBããã¥ã¡ã³ãã®è¡šã®å§ãŸãã§ãã
ããããã¹ãŠã®åèªã®èåŸã«ãããã®ãç¥ãå¿ èŠãããã®ã§ãMariaDBã®ããã¥ã¡ã³ããåç §ããããšããå§ãããŸãã ããã«ã¯æ確ãªåçãã€ã©ã¹ããè£ åãããŠããããããããäœãäœã«å±ããŠããããç解ã§ããŸãã
ãªããã£ãã€ã¶ãŒã«ã©ã®ããã«åœ±é¿ãäžããããšãã§ããŸããïŒ
- ã¯ãšãªã®æžãæããšã¯ãåçã®åœ¢åŒã®æžã蟌ã¿ã䜿çšããããšã§ããããšãã°ããµãã¯ãšãªãçµåã«çœ®ãæããããã¯ãšãªãæ ¹æ¬çã«æžãæããŠãæçã«åå²ããäžæçãªäžéããŒãã«ã«ããŒã¿ãæžã蟌ãããäžè¬çã«ããŒãã«ãéæ£èŠåããŸãjoin'ovãåãé€ããŸãã
- ã€ã³ããã¯ã¹-å¿ èŠãªã€ã³ããã¯ã¹ãè¿œå ããããç£èŠããããšãã§ããŸãããããããçµ±èšãæŽæ°ããã ãã§ãã
- ãªããã£ãã€ã¶ãŒã®ãã³ã-ã€ã³ããã¯ã¹ã®äœ¿çš/匷å¶/ç¡èŠ-ãœãŒããã°ã«ãŒãåãªã©ãã©ã®æäœã«ã©ã®ã€ã³ããã¯ã¹ã䜿çšããããæ瀺çã«æå®ã§ããŸãã
- straight_join-ããŸããŸãªãªãã·ã§ã³ãå埩ããªãããã«ãããŒãã«ãçµåããããã®å³å¯ãªé åºãèšå®ã§ããŸãã ããŒã¿ã®ååžã®ç¹åŸŽãç¥ã£ãŠãããäœæ¥ããå¿ èŠãããé åºãç¥ã£ãŠããã®ã§ããããæ確ã«ç€ºããŸãã
- @@ optimizer_switch-ãã®å€æ°ã䜿çšããŠãç¹å®ã®è¿œå æé©åææ³ããã¹ãŠæå¹/ç¡å¹ã«ããŸãã
- å€æ°optimizer_prune_levelããã³optimizer_search_depthã¯ããµãŒããŒãæé©ãªãã©ã³ãéžæããæ¹æ³ã決å®ããŸã-ãã¹ãŠã®å¯èœãªãªãã·ã§ã³ãå埩ãããããããç Žæ£ããŸãã å€æ°ã®çµåããŒãã«ãããããµãŒããŒãæ°çŸäžã®é åãåæããå Žåãææ ®æ·±ããªãã1ç§ã§å®äºããã«ã¯15åãããããšãããã®ã¯æããã§ãã ãããã£ãŠããã®ãããªç¶æ³ãçºçãããšããããã®å€æ°ã¯ãã¹ãŠããã©ã«ãã§å®è¡æéãå¶éããŸããããã«ãããèšç»ãæé©ã«éžæãããªãå¯èœæ§ããããŸãã æé©åãå®è¡ãããšãããã¹ãã¢ãŒãã§ãããã®å€æ°ãå€æŽããŠããµãŒããŒããã¹ãŠã®ãªãã·ã§ã³ãéžæããããæé©ãªãã©ã³ãéžæãããŠãããã©ããã確èªã§ããŸãã
SQL_CALC_FOUND_ROWSã¯ãæé©åãå®å šã«ç¡å¹ã«ããæãããåèªã§ãã å®éã«ã¯ãLIMITãªã¯ãšã¹ããããå ŽåãããŒã¯ãŒãããªã¯ãšã¹ãã«å«ããããšãã§ãããµãŒããŒã¯ç¡å¶éã«éžæãããåèšæ°ãå«ãã¬ã¹ãã³ã¹ãæäŸããŸãã ããã¯ãããšãã°ãããŒãžã®ããŒãžããŒã·ã§ã³ãè¡ããšãã«äŸ¿å©ã§ããããã¹ãŠã®èªåã·ã¹ãã ããããåŒãèµ·ãããŸãã MySQLã¯COUNTã¯ãšãªãéåžžã«ããŸãæé©åã§ãããããããã¯æªãããšã§ãããå°é£ãªã±ãŒã¹ã§ã¯ãçµåãã°ã«ãŒããªã©ãããå Žåãè¡æ°ãåå¥ã«ã«ãŠã³ãããçµåã®äžéšãçµåããããã«ã¯ãšãªãæžãæããããšãã§ããŸãã°ã«ãŒãã®äžéšã§ããããŒãžã®åèšæ°ã«é¢ããåçãåŸãå¿ èŠã¯ãããŸããã
ãµãŒããŒã¯ãªã¯ãšã¹ãããšã«1ã€ã®ã¡ãœããã®ã¿ã䜿çšããŸãã FOUND_ROWSãè¿œå ãããšã1ã€ã®ã¡ãœããã§2ã€ã®åé¡ã解決ãããŸãã 圌ã¯å®éã«ãã¹ãŠã®è¡ãéžæããŸããLIMITããªãå Žåã¯ãã¹ãã¬ãŒãžããããŒã¿ãåŒãåºããŸãããã¹ãŠã®é·ãã¬ã³ãŒãã¯ãäœåãªãã®ãç Žæ£ãããšä¿¡ããŠããŸã...ããã¯éåžžã«æªãããšã§ãã ããã§ãåãCOUNTïŒ*ïŒã¯è¡èªäœãèªã¿åãããããŒã¿ããªãŒããŒã«æž¡ããã«ãå¯çšæ§ã®äºå®ãã¹ãã£ã³ããã ãã§ãããšããããšãç解ããå¿ èŠããããŸãã
ãã®ã¬ãã«ã§ã¯ãç解ããããã«è©³çŽ°ãç¥ãå¿ èŠããããŸããããããªããšãåã«EXPLAINãèŠãã ãã§ã¯ããŸãæå³ããããŸããã
EXPLAINã®æ¬ ç¹ã¯ããªããã£ãã€ã¶ãŒã®æ¬ ç¹ã«èµ·å ããŸãã EXPLAINãèŠæ±ãæºãããŠããªããåã«èšç»ãç«ãŠãŠãããšèšããšããäžè¬ã«ã圌ãããŠããããšãæžããŠããªãããã»ãšãã©æ å ±ãåºããŠããªãããšããããŸãã å€ãããŒãžã§ã³ã§ã¯ããµãã¯ãšãªããå®è¡ãããŠããŸããã 圌ã¯ãµãã¯ãšãªããäžæçãªãµãããŒãã«ã«å ·äœåããããããéãå Žåããµãã¯ãšãªããããããå®äºããã®ã«å€ãã®æéãããããŸããã ãŸãããµãã¯ãšãªããããŒã¿ãå€æŽãããŠãŒã¶ãŒå®çŸ©é¢æ°ãå«ãŸããå ŽåããããEXPLAINèªäœãããŒã¿ãå€æŽãããšããäºå®ãšççŸããããŸããã ãªããããå¿ èŠãªã®ãã¯æããã§ã¯ãããŸããããå®éã«ã¯äººã ã¯æã éåžžã«å¥åŠãªããšãæãã€ããŸãã
EXPLAINã®çš®é¡
PARTITIONSããŒã¯ãŒãã䜿çšãããšãã¯ãšãªã䜿çšããã»ã¯ã·ã§ã³ã衚瀺ãããŸãã
EXTENDEDããŒã¯ãŒãã¯ãå®è¡ãã©ã³ãã埩å ãããSQLã¯ãšãªãçæãããšããç¹ã§äŸ¿å©ã§ãã ããã¯å ã®SQLã¯ãšãªã§ã¯ãªããå ã®SQLã¯ãšãªããã©ã³ã«å€æããããªããã£ãã€ã¶ãŒã«ãã£ãŠãã©ã³ããæ°ããSQLã¯ãšãªãåæãããŸãããªããã£ãã€ã¶ãŒã«ã¯ãäœãèµ·ãã£ãŠããã®ããç解ã§ããå€ãã®ãã³ããå«ãŸããŠããŸãã ããŒãå«ãäžæããŒãã«ã®åœ¢æããªã¯ãšã¹ãã®äžéšã®ãã£ãã·ã¥-ãããã®ãã¥ã¢ã³ã¹ã¯ãã¹ãŠããã¥ã¡ã³ãã«è©³ãã説æãããŠããããµãŒããŒã®æ©èœããªã¯ãšã¹ãã®å€ææ¹æ³ã®ç解ã«åœ¹ç«ã¡ãŸãã
å®éãããã¯æãåçŽãªã¯ãšãªã®EXPLAINã§ãã
ããã§ã¯ã次ã確èªããå¿ èŠããããŸãã
- 䜿çšãããã¢ã¯ã»ã¹ã®ã¿ã€ãã æåã®ã±ãŒã¹ã§ã¯ããã¹ãŠã§ã-ããŒãã«å šäœãã¹ãã£ã³ãããŸãã 2çªç®ã®å Žåãeq_refã¯ããŒã«ããçŽæ¥æ€çŽ¢ã§ããã1ã€ã®ã¬ã³ãŒãã圢æããŸãã
- ãããäœããã®èŠåã§ããå Žåãäºæ³ãããè¡æ°ã
- possible_keysã¯ãªããã£ãã€ã¶ã䜿çšããäºå®ã®ããŒã§ãããkeyã¯éžæããããŒã§ãã ããšãã°ãpossible_keyïŒNULLããããäžéšã®ããŒãããŒå€ã«ããå Žåãããªã¢ã³ããå¯èœã§ãã ããã¯ãããšãã°ãSELECT FROMããŒãã«ã«WHEREå¥ããªãå Žåã«çºçããŸãã ãªããã£ãã€ã¶ãŒã¯ãããŒã䜿çšããå¿ èŠããªãããšãèªèããåãããŒã®äžéšã§ããããã«èŠããŸããååãšããŠãã€ã³ããã¯ã¹ã«ãã£ãŠåãéžæããŠãããã«ããŒããã€ã³ããã¯ã¹ãäœæã§ããŸãã ãããã£ãŠãpossible_keyïŒNULLã§ããããšãå€æããå¯èœæ§ããããkeyã¯ã«ããŒã€ã³ããã¯ã¹ã§ãããã€ã³ããã¯ã¹ã䜿çšããããšãæå³ããŸãã
- key_lenã¯ã䜿çšããã€ã³ããã¯ã¹ã®é·ãã§ããã€ãŸããè€åã€ã³ããã¯ã¹ãããå Žåãkey_lenãèŠããšãã€ã³ããã¯ã¹ã®ã©ã®éšåã䜿çšããŠããããããããŸãã
ããã«ããã¹ãŠã®å¯èœãªãªãã·ã§ã³ã詳现ã«æ€èšããããšã¯ããŸãã-ããã¯ããã¥ã¡ã³ãã«è©³ãã説æãããŠããŸãã
ã¯ãšãªã«è¡šç€ºãããããŒãã«ããšã«1è¡ã圢æããããŒãã«ã衚瀺ãããé åºã§ã¯ãšãªãå®è¡ããããšã¯æããã§ãã EXPLAINãèŠããšã次ã®ããŒãã«ãžã®ã¢ã¯ã»ã¹é åºãéžæãããŠããããšãããã«ããããŸããæåã«éœåžããŒãã«ãéžæãã次ã«åœããŒãã«ãéžæããŸãã ããã§ã¯ãã¹ãŠãç°¡åã§ãã
ããããç°ãªãUNIONãFROMãµãã¯ãšãªãªã©ãå«ãEXPLAINã®ãããªè€éãªããªãã¯ããããé·ããã·ãŒãããåºåãããå ŽåïŒ
質åãçºçããŸã-ãããèªãæ¹æ³ïŒ
ã¢ã€ãã¢ã¯éåžžã«åçŽã§ããã¯ãšãªã«è¡šç€ºããããã¹ãŠã®SELECTã«çªå·ãä»ããSELECTçªå·ã¯EXPLAINã«ããèå¥åçªå·ã«å¯Ÿå¿ããŸãã
ããããããããããã«ãããŸããŸãªè²ã§åŒ·èª¿è¡šç€ºããŸããã
2çªç®ã®èŠå-æ°åãèŠãããšãã§ããŸãã ããšãã°ã6-DERIVEDã¯FROMãµãã¯ãšãªã§ãã 次ã®ãã®ã«ã¯ããã倧ããªèå¥åãä»ããŠããŸãã ããã¯ãåãFROMãµãã¯ãšãªãã€ãŸã åãäžæããŒãã«ã«ç§»åããŸãã ãããã£ãŠãèå¥åã ããèŠããšããã§ã«å€ãã®çµè«ãåŒãåºãããšãã§ããŸãã
äžäŸ¿ãªç¹ããããŸããè¡ã¯é çªã«å®è¡ããããšèšããŸããå®éããã¥ãŒãªã©ãååšããå Žåãããã¯å®å šã«çå®ã§ã¯ãããŸããã ã€ãŸã UNIONã䜿çšããã¯ãšãªã¯ããã®ããã«äŸ¿å©ã«èªã¿åãããŸãã4ã€ã®UNIONããããŸããã€ãŸãã1ã4è¡ç®ã¯UNIONã®äžéšã«é¢é£ãã4çªç®ããæåŸã¯2çªç®ã®éšåãåç §ããŸãã ã€ãŸã æåŸã®è¡ãèŠãŠäžã«è¡ãããšãã§ããã®ã§ãã¯ãšãªãåå²ã§ããŸãã å®éãããã«ã¯è€éãªããšã¯äœããããŸãããã¹ãã«ãå¿ èŠã§ãã
EXPLAINã®ã°ã©ãã£ã«ã«ãªè¡šçŸãããã«æ§ç¯ãããŠãŒãã£ãªãã£ããããŸãããç¹ã«è€éãªã¯ãšãªã®å Žåã¯ç解ãã«ãããããããããèæ ®ããŸããã ããã¯çã®ããã§ãã
EXPLAINãåãã€ããŠããäŸ
äžéšã«ãµãã¯ãšãªãå«ãã¯ãšãªããããŸãã ãµãã¯ãšãªã¯ç¬ç«ããŠããŸãããMariaDB 5.3ããã³MySQL 5.6ããåã®MySQLã¯å€ãã®å Žåããããã®ã¯ãšãªãäŸåãšããŠå®è¡ããŠããŸããã ã¯ãšãªã®ã¿ã€ãã¯äŸåé¢ä¿ã«ãããŸãããäžæ¹ã§index_subqueryã¿ã€ãã¯è¡šç€ºãããŸããããã¯ãå®éã«ã¯ãµãã¯ãšãªã¯å®è¡ããããã€ã³ããã¯ã¹ãã¥ãŒé¢æ°ã«çœ®ãæããããããšãæå³ããŸãã ã€ãŸã ãããã®è¡ã¯äºãã«ç«¶åããå察ã®ããšã«ã€ããŠè©±ããŸãã
質åãçºçããŸã-å®éã«äœãèµ·ããã®ã§ããããªããªã EXPLAINã¯ççŸããæ å ±ãçæããŸããïŒ
ãããã¡ã€ãªã³ã°ããªã¯ãšã¹ãããŠç¢ºèªã§ããŸãïŒ
å³ã®ããã«ããªã¯ãšã¹ããäŸåããŠå®è¡ãããå Žåããªã¯ãšã¹ãã®å®è¡ã®äžéšã§ããããŒã¿è»¢éãè€æ°ã«ãªããè€è£œãããŸãã ã¯ãšãªãåå¥ã«å®è¡ãããå Žåããããã®å€ã¯è€è£œãããŸããã
ããã«ããããã¡ã€ãªã³ã°ã¯ãããã°ããŒã¿ã®è»¢éãçµ±èšã®ã«ãŠã³ããªã©ã®ãã¥ã¢ã³ã¹ã決å®ããã®ã«äŸ¿å©ã§ãã
ä»åã
ORDER BY id LIMIT 10000ã®å Žåã10ã¯æªãããã ãµãŒããŒã¯1äžè¡ãã¹ãŠãéžæããããã«10è¡ãéžæãã1001è¡ç®ãåé€ããŠ10è¡ã®ã¿ãæäŸããŸãã ãã®ãããªããšã¯äœããã®æ¹æ³ã§å€æŽããå¿ èŠããããŸãã ãŸãã¯ãIDã10,000ãè¶ ããŠãããLIMIT 10ã§ãããµãŒããŒãäœãããããšããç¹ã§ã倧ããªæ°ãçžæ®ºããå Žåãããã¯æªãããšã§ãã
ORDER BY randïŒïŒã¯äœ¿çšã§ããŸããããã®æ§é ã¯ããã¹ãŠã®ããŒã¿ã®ã³ããŒãäœæãããããäžæããŒãã«ã«ããã·ã¥ããããã«å¥ã®åãè¿œå ããããã«randé¢æ°ã®çµæãæžã蟌ã¿ããã®å·šå€§ãªé åå šäœã®ãã¡ã€ã«ãœãŒããè¡ããŸãããããã£ãŠãã©ã³ãã ãªè¡ãéžæããå ŽåãORDER BY randïŒïŒã¯å°éã®ããŒã¿ã§ã®ã¿äœ¿çšã§ãã倧éã®ããŒã¿ã§ã¯ããã«ãã¹ãŠã®ããã©ãŒãã³ã¹ãäœäžããŸãã
ããã©ã«ãã§ã¯ãã°ã«ãŒãåããœãŒããè¡ãããããœãŒããäžèŠãªå Žåã¯ãæ瀺çã«-ORDER BY nullãæå®ããå¿ èŠããããŸãã
æã ã¯æ¢ã«äžã§è°è«ããŠããæ®ãã®éšåã
ãã®ãããªäŸïŒ
- . 10 , .. , . , â â join' . : . . , .
, 10 â 10 + , 10 + . , .. , . , , . , , , , , , , Using filesort, . Using filesort' â .
, : , - , . , - , .
, UNION' from . , , .. , UNION', + , . , , .
ORDER BY + LIMIT , WordPress.
â , , .. , 3 . , , Using filesort . ãªããªã , , .. , , , , .. 2 .
, . , , , category_ID=1, , , . . , , , 3 , .
Using filesort, , â . show status , , 95 . , . key bufer size, , . , , , , .
, .
, .., , , , , 2 (, ). - .
, â EXPLAN', .
ANALYZE statement â , PostgreSQL , MariaDB 10.1, beta.
SHOW EXPLAIN, MariaDB EXPLAIN . .
SQLinfo.ru/forum/ãã©ãŒã©ã ã§è³ªåãããããšãã§ããŸãã