SQLåå¿è
ã®ç幎ééãISUCONäºéžééããæ¹æ³
äŒæ¥ã«ISUCONãšããã³ã³ãã¹ãã®äºéžã«åå ãããISUCONãšããã®ã¯Webã¢ããªã±ãŒã·ã§ã³ãããã«é«éåã§ããããç«¶ãã³ã³ãã¹ããã¹ãã³ãµãŒã¯LINE瀟ãªã©ã§è³éã¯100äžåã§è±ªè¯ã
ISUCON5 æ¬éžåºå Žè
決å®ã®ãç¥ãã
倧åŠã®åããµãŒã¯ã«ã® pastak, nonamea774 ãšãããŒã åŠçèªæ²»ããšããããŒã åã§åºå Žãããã¡ãªã¿ã«ãäŒåŠäžã®åãå«ããŠäžäººãšã倧åŠã§ç幎ããŠãããä»ããªã忥ã®ç®åŠã¯ãã£ãŠããªãã
ISUCONã§ã¯åãã®ç°å¢ãšããŠMySQLãäžããããããšãå€ãã®ã ãã©ãããŒã ã¡ã³ããŒã¯äžäººãšãRailsçãŸãMongoDBè²ã¡ãšããæãã§ãMySQLã¯SELECTæããããããŠç¥ã£ãŠãããšããçšåºŠã§ãããã©ãŒãã³ã¹æ¹åã®çµéšãããŸããªãã£ãã
ããã§ãéè¯ã15079ç¹ã®æçžŸã§äºéžãééã§ããïŒãããåŠçæ ã§ã¯ãªãïŒãäºéžã§ãã£ãããšãæžããŠã¿ãŸãã
æºåã¯ããŒã ã§äžåºŠéãŸã£ãŠæšå¹Žã®éå»åãæ°æéãã£ãŠã¿ãã ãã§ããã
äœæŠ1: é
ããšãããæ¢ã
æŠç¥ãç·Žãããã«ãåé¡ãææ¡ããããšã«æéã䜿ãããšã«ããããé¡ã¯ãããããšæ©èœãªã©ã®ããå€ãè¯ãSNSã ã£ããèšèªã¯ããŸãèããã«Rubyã䜿ã£ãã
nginxã®ãã°ããšã£ãŠã©ããããªã¯ãšã¹ããæ¥ãŠãã®ãèŠãããRubyã®ã³ãŒãããã«ãŒãã£ã³ã°ã®éšåã ã䞊ã¹ããããŠã©ãããåŠçãããã®ãçºãããããã
æã£ããããã¢ããªã®ä»æ§ã倧ããæ°ãããã®ã§ãå€ã«åå®è£
ãããããã®ã¯ãããŠå°éã«æ¹åããããšèããã
nonamea744ããã³ãããŒã¯ãèµ°ãããnginxãã°ããããã®ã§ããããã«èœã¡ãŠãLTSVãããŒã¹ããŠãœãŒãããã³ãŒããã³ããããŠããŠãã¢ã¯ã»ã¹ãå€ãå Žæã調ã¹ããããã
pastakã rack-lineprof ãšãã䟿å©ãããã¡ã€ã©ãèŠã€ããŠå
¥ããŠãããã®ã§ããã°ãçºããŠãããšç°æ§ã«é
ãå Žæãããããããããšã«æ°ã¥ãããã®rack-lineprofã¯æåŸãŸã§ãäžè©±ã«ãªã£ãã
é
ãSQLã¯ãšãªãæããŠããšããã®ã¯ããã£ãããã©ãSQLã®åºæ¬çãªç¥èãæ¬ ããŠããŠããJOINã£ãŠãªãã??? ã€ã³ããã¯ã¹ã£ãŠäœãã©ã貌ããã?????ã ãšãæãå§ããã®ã§æ¬¡ã®äœæŠã«ç§»ã£ãã
ã€ã³ããã¯ã¹ãšããæŠå¿µãããããšã¯ç¥ã£ãŠãã®ã§ããMySQL ã€ã³ããã¯ã¹ããšãã§æ€çŽ¢ããŠåºãŠããQiitaã®ãŸãšãèšäºãšããèªãã§ãããããšãã°ãããªèšäºã
èªã¿ãªããããã£ãœããšããã«indexã貌ãå§ããããã®é ã¯PRIMARY KEYã«ã¯index貌ããªããŠããã®ïŒïŒïŒãšã話ããŠãã
è
¹ãæžã£ãã®ã§ãpastakã«ã³ã³ã€ãã®ã«ã¬ãŒãè²·ãã«è¡ãããäœæŠã決è¡ããã
JOINãšããã®ã䜿ã£ããéããªããããšæã£ãŠãåèå®è£
ã³ãŒãäžã®JOINæãã»ãŒãã¯ã£ãŠããããã¯ãšãªãæãããšãããäžã€ã«ãããããã
EXPLAINæãåŠãã ããINæŒç®åãšããã®ãç¥ã£ãŠåãã ãããªãããN+1åé¡??ãšããã®ãè§£æ¶ããŠããã
åºæ¬çã«ã¯rack-lineprofã䜿ã£ãŠæéã®ãããè¡ãèŠã€ããŠãã°ã°ããŠéãããæ¹æ³ãæ¢ããšããã®ãç¹°ãè¿ããŠãã
nonamea774ããŠãŒã¶ãŒäžèЧãã¹ã¬ããã¡ã¢ãªã«ãã£ãã·ã¥ãããããªã®ããã£ãŠãããã®ã§ãviewã«åã蟌ãŸããŠããã¯ãšãªã朰ãããããŠãããçµäºäžæéååã«æ®ã15000ç¹ã«ãªã£ãã
ãããããã£ãšã¡ã¢ãªã«ãã£ãã·ã¥ãããããªãã€ãèãããã©ãå®åäžè¶³ã§ãŸã£ããã¹ã³ã¢ã¯äžããããšããæãã ã£ãã
æåŸã®30åãããã¯æçµç¢ºèªãããããããããããšããªãã£ãã®ã§ã諊ããŠããŒã«ã飲ãã§ç¥ã£ãŠãã
æåŸã«ç¥ã£ãç²æããã£ãŠããéè¯ãæ¬éžã«åºå Žã§ããããšã«ãªã£ãã
SQLã»ãšãã©ç¥ããªãã£ããã©ãISUCONã§è©Šè¡é¯èª€ããŠããéã«å°ããã€åŠã¶ããšãã§ããŠæ¬åœã«è¯ãã£ãã
ä»åã¯ããŸããŸéè¯ããã£ããã©ãæåŸãŸã§RIGHT JOIN, LEFT JOINãšã¯äœãªã®ãã¿ãããªèšäºãèªãã§ããŠçµå±ããããªããšããå
·åã ã£ãã®ã§ãæããã«å®åäžè¶³ã ã£ããšæããæ¬éžãŸã§ã«ããã¡ãã£ãšå匷ãããã
åå¿è
ã§ãããããªããªãã«é 匵ããå
容ã«ãªã£ãŠããŠæ¬åœã«æ¥œããã£ãã§ããéå¶ã®çããããããšãããããŸããã