Ê×ÏÈÊÇÈçºÎ¼ì²éSQLµÄЧÂÊ.
1.ÉÆÓÃexplain:
Éè¼ÆSQLºó£¬Ó¦Ê¹ÓÃexplainÃüÁî¼ì²éSQL£¬¿´ÊÇ·ñʹÓõ½Ë÷Òý£¬ÊÇ·ñ´æÔÚfilesort,ÖØµã¼ì²é¼ìË÷µÄÐÐÊý£¨rows£©ÊÇ·ñÌ«´ó¡£
Ò»°ãÀ´Ëµ.
rows<1000£¬ÊÇÔڿɽÓÊܵķ¶Î§Äڵġ£
rowsÔÚ1000~1wÖ®¼ä£¬ÔÚÃܼ¯·ÃÎÊʱ¿ÉÄܵ¼ÖÂÐÔÄÜÎÊÌ⣬µ«Èç¹û²»ÊÇ̫Ƶ·±µÄ·ÃÎÊ£¨ÆµÂʵÍÓÚ1·ÖÖÓÒ»´Î£©£¬ÓÖÄÑÔÙÓÅ»¯µÄ»°£¬¿ÉÒÔ½ÓÊÜ£¬µ«ÐèҪעÒâ¹Û²ì
rows´óÓÚ1Íòʱ£¬Ó¦É÷ÖØ¿¼ÂÇSQLµÄÉè¼Æ£¬ÓÅ»¯SQL£¬ÓÅ»¯db£¬Ò»°ãÀ´Ëµ²»ÔÊÐíÆµ·±ÔËÐУ¨ÆµÂʵÍÓÚ1Сʱһ´Î£©¡£
rows´ïµ½10w¼¶±ðʱ£¬¼á¾ö²»ÄÜ×öΪʵʱÔËÐеÄSQL¡£µ«µ¼Êý¾Ý³¡ºÏ³ýÍ⣬µ«µ¼Êý¾Ý±ØÐë¿ØÖÆºÃʱ¼ä£¬Æµ¶È¡£
explain SQLÓï¾äÓ¦¸ÃÊÇÈÕ³£¿ª·¢ÖеÄϰ¹ß¶¯×÷£¬ÓÐʱexplain³öÀ´µÄ½á¹û£¬¿ÉÄÜ»á³öÓÚÆ«ÀëÉè¼ÆµÄÒâÁÏÖ®Íâ,ËùÒÔ
**Ç¿ÁÒ½¨ÒéÔÚÉè¼ÆSQL£¬ÓÈÆäÊÇÉÔ΢¸´ÔÓµÄSQLʱ£¬Ò»¶¨ÒªÔÚ²âÊÔ»·¾³ÉõÖÁÊÇʵ¼Ê»·¾³ÉÏÔ¤ÏȽøÐÐexplain**
2.MySQLÂý²éѯÈÕÖ¾
Ò»°ãÓ¦´ò¿ªMySQLµÄÂý²éѯÈÕÖ¾(ÔÚmy.cnfÖмÓÈëlog_slow_queriesºÍlong_query_timeÁ½¸ö²ÎÊý),»á¼Ç¼ËùÓвéѯ³ÖÐøÊ±¼ä³¬¹ýlong_query_timeµÄSQLÓï¾ä£¬°ÑÕâЩÓï¾älogÏÂÀ´Ö®ºó£¬ÔÙÒ»Ò»·ÖÎö(explain)ÓÅ»¯¡£
3.¼àÊÓµ±Ç°½ø³Ì
µÇ½MySQL,ʹÓÃshow processlist²é¿´ÕýÔÚÔËÐеÄSQLÓï¾ä£¬Èç¹ûÕýÔÚÔËÐеÄÓï¾äÌ«¶à£¬ÔËÐÐʱ¼äÌ«³¤£¬±íʾMySQLЧÂÊÓÐÎÊÌâ¡£±ØÒªµÄʱºò¿ÉÒÔ½«¶ÔÓ¦µÄ½ø³Ìkillµô¡£
4.ϵͳÃüÁî
ʹÓÃtop/vmstatµÈϵͳÃüÁîÀ´¼ì²éMySQL½ø³ÌÕ¼ÓõÄcpu,ÄÚ´æ,ÒÔ¼°´ÅÅÌIOÁ¿¡£
¶ÔMySQLÓÅ»¯µÄÎÄÕºܶ࣬ÕâÀïÖ»ÌἸµãƽʱ¹¤×÷ÖбȽϳ£Óõ½µÄ·½·¨¡£
¡ô½¨±íʱ,ÏÔʽָ¶¨Ê¹ÓÃinnodbÊý¾Ý¿âÒýÇæ£¬¶ø²»ÊÇmyisam,myisamÒýÇæµÄËøÊDZíËø,¶ÁËøºÍÐ´ËøÊÇ»¥³âµÄ£¬¶Áд²Ù×÷ÊÇ´®Ðеģ¬Ëø³åÍ»»áÑÏÖØÓ°Ïì²¢·¢.¶øinnodbÌṩÐм¶Ëø£¬ÄÜÌṩ½ÏºÃµÄ²¢·¢±íÏÖ£¬ÔÚÎÒÃǵÄÒµÎñ³¡¾°ÀҲ²»»áÒýÆðËÀËø¡£
¡ôÉÆÓÃË÷Òý£¬¶ÔSQLÓï¾äwhereÌõ¼þÀïʹÓõ½µÄ×ֶΣ¬ºÏÀí½¨Á¢Ë÷Òý¡£ËäÈ»¶Ô±í½¨Á¢Ë÷ÒýÒ»¶¨³Ì¶ÈÉÏ»áÓ°ÏìдÈëЧÂÊ£¬µ«ÔÚ±íÊý¾Ý¹æÄ£²»´ó£¬Ð´ÈëѹÁ¦²»ÊÇÌØ±ð¸ßµÄÇé¿öÏ£¬Ë÷Òý´øÀ´µÄºÃ´¦ÊǸü¶àµÄ¡£
¡ôµ±SQLÓï¾äÊÇÓÉ´úÂ붯̬Éú³ÉµÄ£¬ÈçÔÚÔËÐÐʱ¸ù¾ÝÓû§²Ù×÷¼ÓÈ벻ͬµÄwhere²ÎÊý£¬Ó¦ÔÚ²âÊԽ׶ζÔSQLÉú³ÉµÄµäÐÍÇé¿öºÍ±ß½çÇé¿ö½øÐвâÊÔ£¬¿´ÊÇ·ñÓпÉÄÜÔì³ÉÐÔÄÜÎÊÌâ¡£²¢Ó¦Êʵ±Éú³ÉһЩÈÕÖ¾£¬¹©ÌáÈ¡×îÖÕÉú³ÉµÄSQL½øÐÐЧÂÊ·ÖÎö¡£
¡ô¶ÔÊý¾ÝÓ¦ºÏÀí·Ö¿â·Ö±í£¬ÓÉÓ¦ÓòãÈ¥¶¯Ì¬µÄÑ¡Ôñ¿âºÍ±í¡£MySQLµÄinnodb±íËäÈ»ÀíÂÛÉÏ¿ÉÒÔ×°º£Á¿µÄÊý¾Ý£¬µ«ÔÚÎÒÃǵÄÒµÎñ³¡¾°Ï£¬Êý¾Ý¿ØÖÆÔÚ500wÒÔÏ»á±È½ÏºÏÀí£¬×·ÇóÐÔÄܵϰ£¬×îºÃ¿ØÖÆÔÚ200wÒÔÏ£¬ºÏÀíË÷Òý¡£
¡ôÐèÒªÁªºÏ²éÑ¯Ê±ÉÆÓÃleft join/right join¶ø²»ÊÇÖ±½Ó¶à±íÁªºÏ£¬ÔõôÓ㬲émanul ^_^
¡ô¾¡Á¿²»ÒªÊ¹ÓÃselectÌ×selectµÄ¸´ºÏ²éѯ£¬Èç¹ûÄܲ𿪣¬¾¡Á¿²ð¿ª,¶àÌõ¾«º·µÄSQL,×éºÏÆðÀ´¿ÉÄܾÍÊÇÒ»ÌõÅÓ´óµÄSQL£¬Ó¦¸Ã±ÜÃâ¡£
¡ôÉÆÓÃcache,½«²»³£Ð޸ĵģ¬Êý¾ÝÁ¿ÓÐÏÞµÄ,ÓÖÊDZ»Ãܼ¯²éѯµÄÐÅÏ¢£¬¼ÓÔØµ½cacheÀ¿ÉÒÔÓÐЧµÄ½µµÍÊý¾Ý¿âѹÁ¦¡£ÔÚÒ»°ãµÄÒµÎñ³¡¾°Àï£¬ÍÆ¼öʹÓÿªÔ´memcache£¬¼òµ¥¸ßЧ¡£
¡ôÈç¹ûһЩÂß¼¿ÉÒԷŵ½Ó¦ÓòãÈ¥Íê³É£¬¿ÉÒÔ¿¼ÂǷŵ½Ó¦ÓòãÈ¥Íê³É¡£µ«Èç¹û½«SQLÂß¼·Ö²ðµ½Ó¦Óòã¿ÉÄܵ¼Ö¶ÔÊý¾Ý¸üƵ·±µÄ·ÃÎʵϰ£¬ÄÇôÐèÒª¿¼ÂÇÐÞ¸ÄÓ¦ÓÃÂß¼£¬Êý¾Ý½á¹¹£¬»ò»Øµ½ºÏÀíµÄÁªºÏ²éѯÉÏÀ´¡£
±ÈÈçijЩÊý¾ÝµÄÅÅÐò¿ÉÒÔloadµ½phpÊý×éÀÔÙsort.ÓÖ±ÈÈçÐèÒª²éѯA,BÁ½¸ö±í£¬A±íÀïµÄÊý¾ÝÊÇB±íÀïij¸ö×ֶεĶÔÕÕ˵Ã÷£¨ÈçA:t_service±í£¬B.t_task±í£©£¬A±íÊý¾ÝÁ¿ÓÐÏÞ£¬¿ÉÒÔ×öÁªºÏ²éѯ£¬Ò²¿ÉÒÔÏȽ«A±íÏÈloadµ½½ø³Ì»òÄÚ´æÀÓÃhash½á¹¹cacheÆðÀ´£¬ÔÙ²éB±í£¬È»ºóÔÚcacheÀïÒÀ´Î²éѯhash£¬»ñµÃ¶ÔÕÕ˵Ã÷¡£
¡ô¹ØÓÚµ¼Êý¾ÝºÍͳ¼ÆÐÔ²éѯ.µ¼Êý¾ÝÔÚ¼ÆËãºÍ´ÅÅÌioÉ϶ÔÊý¾Ý¿âѹÁ¦¶¼»áºÜ´ó£¬Ó¦ÔÚʱ¼äºÍ¿Õ¼äÉϺÏÀí·Ö̯Êý¾Ý¿âѹÁ¦Èç¹ûÐèÒªµ¼³öÅúÁ¿µÄÌØ¶¨Êý¾Ý×ö·ÖÎö£¬Ó¦½¨Á¢×¨¹©Êý¾Ý·ÖÎöµÄÊý¾Ý¿â·þÎñÆ÷£¬»òÕß½¨Á¢ÁÙʱ¿â±í£¬Ïȵ¼³öÊý¾Ý£¬ÔÙÔÚÉÏÃæ×ö·ÖÎöÔËËã¡£
µ¼Êý¾ÝµÈ¿ÉÄÜÒýÆðÅúÁ¿Êý¾Ý¶ÁÈ¡µÄ²Ù×÷£¬Ó¦½¨Á¢¶¨Ê±ÈÎÎñ£¬ÔÚÊý¾Ý¿â²»·±Ã¦µÄʱ¶Î£¨Á賿1~7ʱ)ÔËÐÐÒ»°ãµÄͳ¼Æ²Ù×÷£¬¶ÔʵʱÐÔÒªÇó¶¼²»»áÌ«¸ß£¨5~10·ÖÖÓÒÔÉÏ£¬ÉõÖÁÒ»Ì죬һÖܵȣ©£¬ÕâÖÖÊý¾Ý²»Ó¦ÔÚÿ´Î·ÃÎÊʱÔËÐпâÖÐÖ±½Ócount,group,¶øÊÇÓ¦¸ÃÓɶ¨Ê±ÈÎÎñµ¼³ö£¬½¨Á¢½á¹û±í»òÖмä½á¹û±í£¬¹©×îÖÕÓû§Ê¹Óá£
¡ôÉú²úÊý¾Ý¿âÉϵIJÙ×÷ȨÏÞÓ¦Ñϸñ¿ØÖÆ£¬¶ø¿ª·¢ÈËÔ±ÔÚÉú²úÊý¾Ý¿âÉÏÖ±½ÓÔËÐÐSQLÓï¾ä£¬Òª¾¡Á¿É÷ÖØ¡£
ÄÜ×öµ½ÒÔÉÏÕâЩ£¬»ù±¾ÉÏ¿ÉÒÔËãMySQLÒÔ¼°Ïà¹ØÏµÍ³ÓÅ»¯ÈëÃÅ£¬¿ÉÒÔ±£Ö¤²»ÒªÈÃÎÒÃǵÄÊý¾Ý¿âÕûÌìÀÛÅ¿ÏÂÁË¡£
×îºó£¬¼´Ê¹×ö×ãÁ˹¦¿Î£¬Ò²»¹ÊÇÒªÀýÐеĶÔÊý¾Ý¿âÔËÐÐÇé¿ö½øÐй۲죬¼à¿Ø£¬¾¡Ôç·¢ÏÖÆäÐÔÄÜÆ¿¾±£¬ÔÚδÔì³ÉΣº¦Ç°½â¾öµô¡£