Öйú½Ì³ÌÍøÂÛ̳'s Archiver

ÒúÉú ·¢±íÓÚ 2007-11-16 13:24

MySQL ÓÅ»¯È«¹¥ÂÔ

Êý¾Ý¿âÓÅ»¯ÊÇÒ»ÏîºÜ¸´ÔӵŤ×÷£¬ÒòΪÕâ×îÖÕÐèÒª¶ÔϵͳÓÅ»¯µÄºÜºÃÀí½â²ÅÐС£¾¡¹Ü¶Ôϵͳ»òÓ¦ÓÃϵͳµÄÁ˽ⲻ¶àµÄÇé¿öÏÂÓÅ»¯Ð§¹û»¹²»´í£¬µ«ÊÇÈç¹ûÏëÓÅ»¯µÄЧ¹û¸üºÃ£¬ÄÇô¾ÍÐèÒª¶ÔËüÁ˽â¸ü¶à²ÅÐС£

±¾ÕÂÖ÷Òª½²½âÁ˼¸ÖÖÓÅ»¯MySQLµÄ·½·¨£¬²¢ÇÒ¸ø³öÁËÀý×Ó¡£¼Ç×Å£¬×ÜÓи÷ÖÖ°ì·¨ÄÜÈÃϵͳÔËÐеĸü¿ì£¬µ±È»ÁË£¬ÕâÐèÒª¸ü¶àµÄŬÁ¦¡£


7.1 ÓÅ»¯¸ÅÊö



ÈÃϵͳÔËÐеÿìµÃ×îÖØÒªÒòËØÊÇÊý¾Ý¿â»ù±¾µÄÉè¼Æ¡£²¢ÇÒ»¹±ØÐëÇå³þÄúµÄϵͳҪÓÃÀ´×öʲô£¬ÒÔ¼°´æÔ򵀮¿¾±¡£

×î³£¼ûµÄϵͳƿ¾±ÓÐÒÔϼ¸ÖÖ£º

      

      
    * ´ÅÅÌËÑË÷¡£ËüÂýÂýµØÔÚ´ÅÅÌÖÐËÑË÷Êý¾Ý¿é¡£¶ÔÏÖ´ú´ÅÅÌÀ´Ëµ£¬Æ½Ê±µÄËÑË÷ʱ¼ä»ù±¾ÉÏСÓÚ10ºÁÃ룬Òò´ËÀíÂÛÉÏÿÃëÖÓ¿ÉÒÔ×ö100´Î´ÅÅÌËÑË÷¡£Õâ¸öʱ¼ä¶ÔÓÚȫеÄдÅÅÌÀ´ËµÌá¸ßµÄ²»¶à£¬²¢ÇÒ¶ÔÓÚÖ»ÓÐÒ»¸ö±íµÄÇé¿öÒ²ÊÇÈç´Ë¡£¼Ó¿ìËÑË÷ʱ¼äµÄ·½·¨Êǽ«Êý¾Ý·Ö¿ª´æ·Åµ½¶à¸ö´ÅÅÌÖС£

      

      
    * ´ÅÅ̶Á/д¡£µ±´ÅÅÌÔÚÕýÈ·µÄλÖÃÉÏʱ£¬¾ÍÐèÒª¶ÁÈ¡Êý¾Ý¡£¶ÔÏÖ´ú´ÅÅÌÀ´Ëµ£¬´ÅÅÌÍÌÍÂÁ¿ÖÁÉÙÊÇ10-20MB/Ãë¡£Õâ±È´ÅÅÌËÑË÷µÄÓÅ»¯¸üÈÝÒ×£¬ÒòΪ¿ÉÒÔ´Ó¶à¸öý½éÖв¢ÐеضÁÈ¡Êý¾Ý¡£

      

      
    * CPUÖÜÆÚ¡£Êý¾Ý´æ´¢ÔÚÖ÷ÄÚ´æÖУ¨»òÕßËüÒѾ­ÔÚÖ÷ÄÚ´æÖÐÁË£©£¬Õâ¾ÍÐèÒª´¦ÀíÕâЩÊý¾ÝÒԵõ½ÏëÒªµÄ½á¹û¡£´æÔÚ¶à¸ö?íÏà±ÈÄÚ´æÈÝÁ¿À´Ëµ¸üÊÇÏÞÖÆµÄÒòËØ¡£²»¹ý¶ÔÐ"íÀ´Ëµ£¬ËÙ¶Èͨ³£²»ÊÇÎÊÌâ¡?

      

      
    * ÄÚ´æ´ø¿í¡£µ±CPUÒª½«¸ü¶àµÄÊý¾Ý´æ·ÅÔÚCPU»º´æÖÐʱ£¬Ö÷ÄÚ´æµÄ´ø¿í¾ÍÊÇÆ¿¾±ÁË¡£ÔÚ´ó¶àÊýϵͳÖУ¬Õâ²»Êdz£¼ûµÄÆ¿¾±£¬²»¹ýÒ²ÊÇҪעÒâµÄÒ»¸öÒòËØ¡£


7.1.1 MySQL Éè¼ÆµÄ¾ÖÏÞÐÔ

µ±Ê¹ÓÃMyISAM´æ´¢ÒýÇæÊ±£¬MySQL»áʹÓÃÒ»¸ö¿ìËÙÊý¾Ý±íËøÒÔÔÊÐíͬʱ¶à¸ö¶ÁÈ¡ºÍÒ»¸öдÈë¡£ÕâÖÖ´æ´¢ÒýÇæµÄ×î´óÎÊÌâÊÇ·¢ÉúÔÚÒ»¸öµ¥Ò»µÄ±íÉÏͬʱ×öÎȶ¨µÄ¸üвÙ×÷¼°ÂýËÙ²éѯ¡£Èç¹ûÕâÖÖÇé¿öÔÚij¸ö±íÖдæÔÚ£¬¿ÉÒÔʹÓÃÁíÒ»ÖÖ±íÀàÐÍ¡£ÏêÇéÇë¿´"15 MySQL Storage Engines and Table Types"¡£
MySQL¿ÉÒÔͬʱÔÚÊÂÎñ¼°·ÇÊÂÎñ±íϹ¤×÷¡£ÎªÁËÄܹ»Æ½»¬µÄʹÓ÷ÇÊÂÎñ±í£¨·¢Éú´íÎóʱ²»Äܻعö£©£¬ÓÐÒÔϼ¸Ìõ¹æÔò£º

      
    * ËùÓеÄ×ֶζ¼ÓÐĬÈÏÖµ

    * Èç¹û×Ö¶ÎÖвåÈëÁËÒ»¸ö"´íÎó"µÄÖµ£¬±ÈÈçÔÚÊý×ÖÀàÐÍ×Ö¶ÎÖвåÈë¹ý´óÊýÖµ£¬ÄÇôMySQL»á½«¸Ã×Ö¶ÎÖµÖÃΪ"×î¿ÉÄܵÄÖµ"¶ø²»ÊǸø³öÒ»¸ö´íÎó¡£Êý×ÖÀàÐ͵ÄÖµÊÇ0£¬×îС»òÕß×î´óµÄ¿ÉÄÜÖµ¡£×Ö·û´®ÀàÐÍ£¬²»ÊÇ¿Õ×Ö·û´®¾ÍÊÇ×Ö¶ÎËùÄÜ´æ´¢µÄ×î´ó³¤¶È¡£

    * ËùÓеļÆËã±í´ïʽ¶¼»á·µ»ØÒ»¸öÖµ¶ø±¨¸æÌõ¼þ´íÎó£¬ÀýÈç 1/0 ·µ»Ø NULL¡£


ÕâЩ¹æÔòÒþº¬µÄÒâ˼ÊÇ£¬²»ÄÜʹÓÃMySQLÀ´¼ì²é×Ö¶ÎÄÚÈÝ¡£Ïà·´µØ£¬±ØÐëÔÚ´æ´¢µ½Êý¾Ý¿âǰÔÚÓ¦ÓóÌÐòÖÐÀ´¼ì²é¡£ÏêÇéÇë¿´"1.8.6 How MySQL Deals with Constraints ºÍ "14.1.4 Insert Syntax"¡£


7.1.2 Ó¦ÓÃÉè¼ÆµÄ¿ÉÒÆÖ²ÐÔ



ÓÉÓÚ¸÷ÖÖ²»Í¬µÄÊý¾Ý¿âʵÏÖÁ˸÷×ÔµÄSQL±ê×¼£¬Õâ¾ÍÐèÒªÎÒÃǾ¡Á¿Ê¹ÓÿÉÒÆÖ²µÄSQLÓ¦ÓᣲéѯºÍ²åÈë²Ù×÷ºÜÈÝÒ×¾ÍÄÜ×öµ½¿ÉÒÆÖ²£¬²»¹ýÓÉÓÚ¸ü¶àµÄÔ¼ÊøÌõ¼þµÄÒªÇó¾ÍÔ½·¢À§ÄÑ¡£ÏëÒªÈÃÒ»¸öÓ¦ÓÃÔÚ¸÷ÖÖÊý¾Ý¿âϵͳÉÏ¿ìËÙÔËÐУ¬¾Í±äµÃ¸üÀ§ÄÑÁË¡£

ΪÁËÄÜÈÃÒ»¸ö¸´ÔÓµÄÓ¦ÓÃ×öµ½¿ÉÒÆÖ²£¬¾ÍÒªÏÈ¿´Õâ¸öÓ¦ÓÃÔËÐÐÓÚÄÄÖÖÊý¾Ý¿âϵͳ֮ÉÏ£¬È»ºó¿´ÕâЩÊý¾Ý¿âϵͳ¶¼Ö§³ÖÄÄÐ©ÌØÐÔ¡£

ÿ¸öÊý¾Ý¿âϵͳ¶¼ÓÐijЩ²»×ã¡£Ò²¾ÍÊÇ˵£¬ÓÉÓÚÉè¼ÆÉϵÄһЩÍ×Э£¬µ¼ÖÂÁËÐÔÄÜÉϵIJîÒì¡£

¿ÉÒÔÓÃMySQLµÄ crash-me ³ÌÐòÀ´¿´Ñ¡¶¨µÄÊý¾Ý¿â·þÎñÆ÷ÉÏ¿ÉÒÔʹÓõĺ¯Êý£¬ÀàÐÍ£¬ÏÞÖÆµÈ¡£crash-me ²»»á¼ì²é¸÷ÖÖ¿ÉÄÜ´æÔÚµÄÌØÐÔ£¬²»¹ýÕâÈÔÈ»ÊǺϺõÇéÀíµÄÀí½â£¬´óÔ¼×öÁË450´Î²âÊÔ¡£

Ò»¸ö crash-me µÄÐÅÏ¢ÀàÐ͵ÄÀý×Ó¾ÍÊÇ£¬Ëü»á¸æËßÄúÈç¹ûÏëʹÓÃInformix »ò DB2µÄ»°£¬¾Í²»ÄÜʹ×Ö¶ÎÃû³¤¶È³¬¹ý18¸ö×Ö·û¡£

crash-me ³ÌÐòºÍMySQL»ù׼ʹÿ¸ö×¼Êý¾Ý¿â¶¼ÊµÏÖÁ˵ġ£¿ÉÒÔͨ¹ýÔĶÁÕâЩ»ù×¼³ÌÐòÊÇÔõôдµÄ£¬×Ô¼º¾Í´ó¸ÅÓÐÔõÑù×ö²ÅÄÜÈóÌÐò¶ÀÁ¢ÓÚ¸÷ÖÖÊý¾Ý¿âÕâ·½ÃæµÄÏë·¨ÁË¡£ÕâЩ³ÌÐò¿ÉÒÔÔÚMySQLÔ´´úÂëµÄ `sql-bench' Ŀ¼ÏÂÕÒµ½¡£ËûÃǴ󲿷ֶ¼ÊÇÓÃPerlдµÄ£¬²¢ÇÒʹÓÃDBI½Ó¿Ú¡£ÓÉÓÚËüÌṩÁ˶ÀÁ¢ÓÚÊý¾Ý¿âµÄ¸÷ÖÖ·ÃÎÊ·½Ê½£¬Òò´ËÓÃDBIÀ´½â¾ö¸÷ÖÖÒÆÖ²ÐÔµÄÎÊÌâ¡£

ÏëÒª¿´µ½ crash-me µÄ½á¹û£¬¿ÉÒÔ·ÃÎÊ£º[url]http://dev.mysql.com/tech-resources/crash-me.php.[/url] ·ÃÎÊ [url]http://dev.mysql.com/tech-resources/benchmarks[/url] ¿ÉÒÔ¿´µ½»ù×¼µÄ½á¹û¡£

Èç¹ûÄúÏëŬÁ¦×öµ½¶ÀÁ¢ÓÚÊý¾Ý¿â£¬Õâ¾ÍÐèÒª¶Ô¸÷ÖÖSQL·þÎñÆ÷µÄÆ¿¾±¶¼ÓÐһЩºÜºÃµÄÏë·¨¡£ÀýÈ磬MySQL¶ÔÓÚ MyISAM ÀàÐ͵ıíÔÚ¼ìË÷ÒÔ¼°¸üмǼʱ·Ç³£¿ì£¬µ«ÊÇÔÚÓв¢·¢µÄÂýËÙ¶ÁÈ¡¼°Ð´Èë¼Ç¼ʱȴÓÐÒ»¶¨µÄÎÊÌâ¡£×÷ΪOracleÀ´Ëµ£¬ËüÔÚ·ÃÎʸոձ»¸üеļǼʱÓкܴóµÄÎÊÌ⣨ֱµ½½á¹û±»Ë¢Ðµ½´ÅÅÌÖУ©¡£ÊÂÎñÊý¾Ý¿âÒ»°ãµØÔÚ´ÓÈÕÖ¾±íÖÐÉú³ÉÕªÒª±íÕâ·½ÃæµÄ±íÏÖ²»ÔõôºÃ£¬ÒòΪÔÚÕâÖÖÇé¿öÏ£¬ÐмÇÂ¼Ëø¼¸ºõûÓá£

ΪÁËÄÜÈÃÓ¦ÓóÌÐòÕæÕýµÄ×öµ½¶ÀÁ¢ÓÚÊý¾Ý¿â£¬¾Í±ØÐë°Ñ²Ù×÷Êý¾ÝµÄ½Ó¿Ú¶¨ÒåµÄ¼òµ¥ÇÒ¿ÉÀ©Õ¹¡£ÓÉÓÚC++ÔںܶàϵͳÉ϶¼¿ÉÒÔʹÓã¬Òò´ËʹÓÃC++×÷ΪÊý¾Ý¿âµÄ»ùÀà½á¹ûºÜºÏÊÊ¡£

Èç¹ûʹÓÃÁËijЩÊý¾Ý¿â¶ÀÓеÄÌØ¶¨¹¦ÄÜ£¨±ÈÈç REPLACE Óï¾ä¾ÍÖ»ÔÚMySQLÖжÀÓУ©£¬Õâ¾ÍÐèҪͨ¹ý±àÐ´Ìæ´ú·½·¨À´ÔÚÆäËûÊý¾Ý¿âÖÐʵÏÖÕâ¸ö¹¦ÄÜ¡£¾¡¹ÜÕâÐ©Ìæ´ú·½·¨¿ÉÄÜ»á±È½ÏÂý£¬µ«ÊÇËüÄÜÈÃÆäËûÊý¾Ý¿âʵÏÖͬÑùµÄ¹¦ÄÜ¡£

ÔÚMySQLÖУ¬¿ÉÒÔÔÚ²éѯÓï¾äÖÐʹÓà /*! */ Óï·¨À´Ôö¼ÓMySQLÌØÓеĹؼü×Ö¡£È»¶øÔںܶàÆäËûÊý¾Ý¿âÖУ¬/**/ È´±»µ±³ÉÁË×¢ÊÍ£¨²¢ÇÒ±»ºöÂÔ£©¡£

Èç¹ûÓÐʱºò¸ü¸ßµÄÐÔÄܱÈÊý¾Ý½á¹ûµÄ¾«È·¸üÖØÒª£¬¾ÍÏñÔÚһЩWebÓ¦ÓÃÖÐÄÇÑù£¬Õâ¿ÉÒÔʹÓÃÒ»¸öÓ¦ÓòãÀ´»º´æ½á¹û£¬Õâ¿ÉÄÜ»áÓиü¸ßµÄÐÔÄÜ¡£Í¨¹ýÈþÉÊý¾ÝÔÚÒ»¶¨Ê±¼äºó¹ýÆÚ£¬À´ºÏÀíµÄ¸üлº´æ¡£ÕâÊÇ´¦Àí¸ºÔØ¸ß·åÆÚʱµÄÒ»ÖÖ·½·¨£¬ÕâÖÖÇé¿öÏ£¬¿ÉÒÔͨ¹ý¼Ó´ó»º´æÈÝÁ¿ºÍ¹ýÆÚʱ¼äÖ±µ½¸ºÔØÇ÷ÓÚÕý³£¡£

ÕâÖÖÇé¿öÏ£¬½¨±íÐÅÏ¢ÖоÍÒª°üº¬Á˳õʼ»¯»º´æµÄÈÝÁ¿ÒÔ¼°Õý³£Ë¢ÐÂÊý¾Ý±íµÄƵÂÊ¡£

Ò»¸öʵÏÖÓ¦Óò㻺´æµÄ¿ÉÑ¡·½°¸ÊÇʹÓÃMySQLµÄ²éѯ»º´æ£¨query cache£©¡£ÆôÓòéѯ»º´æºó£¬Êý¾Ý¿â¾Í»á¸ù¾ÝһЩÏêÇéÀ´¾ö¶¨ÄÄЩ½á¹û¿ÉÒÔ±»ÖØÓá£Ëü´ó´ó¼ò»¯ÁËÓ¦ÓóÌÐò£¬ÏêÇéÇë¿´"5.11 The MySQL Query Cache"¡£


7.1.3 ÎÒÃǶ¼ÓÃMySQLÀ´×öʲô



±¾ÕÂÃèÊöÁËÒ»¸öMySQLµÄÔçÆÚÓ¦Óá£

ÔÚMySQL×ʼµÄ¿ª·¢¹ý³ÌÖУ¬MySQL±¾À´ÊÇҪ׼±¸¸ø´ó¿Í»§Óõģ¬ËûÃÇÊÇÈðµäµÄ2¸ö×î´óµÄÁãÊÛÉÌ£¬ËûÃÇÓÃÓÚ»õÎï´æ´¢Êý¾Ý¹ÜÀí¡£

ÎÒÃÇÿÖÜ´ÓËùÓеÄÉ̵êÖеõ½½»Ò×ÀûÈóÀۼƽá¹û£¬ÒԴ˸øÉ̵êµÄÀϰåÌṩÓÐÓõÄÐÅÏ¢£¬°ïÖúËûÃÇ·ÖÎöÈç¹û¸üºÃµÄ´ò¹ã¸æÒÔÓ°ÏìËûÃǵĿͻ§¡£

Êý¾ÝÁ¿Ï൱µÄ´ó£¨Ã¿¸öÔµĽ»Ò×Àۼƽá¹û´ó¸ÅÓÐ7°ÙÍò£©£¬¶øÇÒ»¹ÐèÒªÏÔʾ4£­10Äê¼äµÄÊý¾Ý¡£ÎÒÃÇÿÖܶ¼µÃµ½¿Í»§µÄÐèÇó£¬ËûÃÇÒªÇóÄÜ¡®Ë²¼ä¡¯µØµÃµ½Êý¾ÝµÄ×îб¨±í¡£

ÎÒÃǰÑÿ¸öÔµÄÈ«²¿ÐÅÏ¢´æ´¢ÔÚÒ»¸öѹËõµÄ¡®½»Òס¯±íÖÐÒÔ½â¾öÕâ¸öÎÊÌâ¡£ÎÒÃÇÓÐһЩ¼òµ¥µÄºêÖ¸Á£¬ËüÃÇÄܸù¾Ý²»Í¬µÄ±ê×¼´Ó´æ´¢µÄ¡®½»Òס¯±íÖиù¾Ý×ֶηÖ×飨²úÆ·×é¡¢¿Í»§id¡¢É̵êµÈµÈ£©È¡µÃ½á¹û¡£ÎÒÃÇÓÃÒ»¸öСPerl½Å±¾¶¯Ì¬µÄÉú³ÉWebÒ³ÃæÐÎʽµÄ±¨±í¡£Õâ¸ö½Å±¾½âÎöWebÒ³Ãæ£¬Ö´ÐÐSQLÓï¾ä£¬²¢ÇÒ²åÈë½á¹û¡£ÎÒÃÇ»¹¿ÉÒÔÓÃPHP»òÕßmod_perlÀ´×öÕâ¸ö¹¤×÷£¬²»¹ýµ±Ê±»¹Ã»ÓÐÕâ2¸ö¹¤¾ß¡£

ΪÁ˵õ½Í¼ÐÎÊý¾Ý£¬ÎÒÃÇ»¹Ð´ÁËÒ»¸ö¼òµ¥µÄCÓïÑÔ¹¤¾ß£¬ÓÃÓÚÖ´ÐÐSQL²éѯ²¢ÇÒ½«½á¹û×ö³ÉGIFͼƬ¡£Õâ¸ö¹¤¾ßͬÑùÊÇPerl½Å±¾½âÎöWebÒ³Ãæºó¶¯Ì¬Ö´Ðеġ£

ºÜ¶àÇé¿öÏ£¬Ö»Òª¿½±´ÏÖÓеĽű¾¼òµ¥µÄÐÞ¸ÄÀïÃæµÄSQL²éѯÓï¾ä¾ÍÄܲúÉúеı¨±íÁË¡£ÓÐʱºò£¬¾ÍÐèÒªÔÚÏÖ´æµÄÀۼƱíÖÐÔö¼Ó¸ü¶àµÄ×ֶλòÕßн¨Ò»¸ö¡£Õâ¸ö²Ù×÷Ê®·Ö¼òµ¥£¬ÒòΪÎÒÃÇÔÚ´ÅÅÌÉÏ´æ´¢ÓÐËùÓеĽ»Ò×±í£¨×ܹ²´ó¸ÅÓÐ50GµÄ½»Ò×±íÒÔ¼°20GµÄÆäËû¿Í»§×ÊÁÏ£©¡£

ÎÒÃÇ»¹ÔÊÐí¿Í»§Í¨¹ýODBCÖ±½Ó·ÃÎÊÀÛ¼Æ±í£¬ÕâÑùµÄ»°£¬ÄÇЩ¸ß¼¶Óû§¾Í¿ÉÒÔ×Ô¼ºÀûÓÃÕâЩÊý¾Ý×öÊÔÑéÁË¡£

Õâ¸öϵͳ¹¤×÷µÄºÜºÃ£¬²¢ÇÒÔÚÊʶȵÄSun Ultra SPARC¹¤×÷Õ¾(2x200MHz)ÉÏ´¦ÀíÊý¾ÝûÓÐÈκÎÎÊÌâ¡£×îÖÕÕâ¸öÏµÍ³ÒÆÖ²µ½ÁËLinuxÉÏ¡£


7.1.4 MySQL »ù×¼Ì×¼þ



±¾Õ±¾À´Òª°üÀ¨MySQL»ù×¼Ì×¼þ£¨ÒÔ¼° crash-me£©µÄ¼¼ÊõÃèÊöµÄ£¬µ«ÊÇÖÁ½ñ»¹Î´Ð´¡£ÏÖÔÚ£¬Äú¿ÉÒÔͨ¹ý²é¿´MySQL·¢²¼Ô´´úÂë `sql-bench' Ŀ¼ÏµĴúÂëÒÔ¼°½á¹ûÓÐÒ»¸ö¸üºÃµÄÏë·¨¡£

»ù×¼Ì×¼þ¾ÍÊÇÏë¸æËßÓû§Ö´ÐÐʲôÑùµÄSQL²éѯ±íÏֵĸüºÃ»òÕ߸ü²î¡£

Çë×¢Ò⣬Õâ¸ö»ù×¼Êǵ¥Ï̵߳ģ¬Òò´ËËü¶ÈÁ¿Á˲Ù×÷Ö´ÐеÄ×îÉÙʱ¼ä¡£ÎÒÃÇδÀ´´òËãÔö¼Ó¶àÏ̲߳âÊԵĻù×¼Ì×¼þ¡£

ÏëҪʹÓûù×¼Ì×¼þ£¬±Ø±¸ÒÔϼ¸¸öÌõ¼þ£º


    * »ù×¼Ì×¼þÔÚMySQLµÄ·¢²¼Ô´´úÂëÖоÍÓС£¿ÉÒÔÈ¥ [url]http://dev.mysql.com/downloads/[/url] ÏÂÔØ·¢²¼°æ»òÕßʹÓÃÏÖÓпª·¢´úÂëÊ÷£¨ÏêÇéÇë¿´"2.3.3 Installing from the Development Source Tree"£©¡£
    * »ù×¼½Å±¾ÊÇÓÃPerlдµÄ£¬ËüÓÃPerlµÄDBIÄ£¿éÀ´Á¬½ÓÊý¾Ý¿â£¬Òò´Ë±ØÐë°²×°DBIÄ£¿é¡£²¢ÇÒ»¹ÐèҪÿ¸öÒª×ö²âÊԵķþÎñÆ÷É϶¼ÓÐÌØ¶¨µÄBDBÇý¶¯³ÌÐò¡£ÀýÈ磬ΪÁ˲âÊÔMySQL¡¢PostgreSQLºÍDB2£¬¾Í±ØÐë°²×° DBD::mysql, DBD::Pg ¼° DBD::DB2 Ä£¿é¡£ÏêÇéÇë¿´"2.7 Perl Installation Note"¡£


È¡µÃMySQLµÄ·Ö·¢Ô´´úÂëºó£¬¾ÍÄÜÔÚ `sql-bench' Ŀ¼Ï¿´µ½»ù×¼Ì×¼þ¡£ÏëÒªÔËÐÐÕâЩ»ù×¼²âÊÔ£¬ÇëÏȴºÃ·þÎñ£¬È»ºó½øÈë `sql-bench' Ŀ¼£¬Ö´ÐÐ run-all-tests ½Å±¾£º



shell> cd sql-benchshell> perl run-all-tests --server=server_name

server_name ¿ÉÒÔÊÇÈκÎÒ»¸ö¿ÉÓõķþÎñ¡£ÏëÒªÁгöËùÓеĿÉÓÃÑ¡ÏîºÍÖ§³ÖµÄ·þÎñ£¬Ö»Òªµ÷ÓÃÒÔÏÂÃüÁ

shell> perl run-all-tests --help

crash-me ½Å±¾Ò²ÊÇ·ÅÔÚ `sql-bench' Ŀ¼Ï¡£crash-me ͨ¹ýÖ´ÐÐÕæÕýµÄ²éѯÒÔÊÔͼÅжÏÊý¾Ý¿â¶¼Ö§³ÖÊ²Ã´ÌØÐÔ¡¢ÐÔÄܱíÏÖÒÔ¼°ÏÞÖÆ¡£ÀýÈ磬Ëü¿ÉÒÔÅжϣº
  
    * ¶¼Ö§³Öʲô×Ö¶ÎÀàÐÍ   
    * Ö§³Ö¶àÉÙË÷Òý   
    * Ö§³ÖʲôÑùµÄº¯Êý
    * ÄÜÖ§³Ö¶à´óµÄ²éѯ
    * VARCHAR ×Ö¶ÎÀàÐÍÄÜÖ§³Ö¶à´ó

¿ÉÒÔ´Ó [url]http://dev.mysql.com/tech-resources/crash-me.php[/url] ÉÏÕÒµ½¸÷ÖÖ²»Í¬Êý¾Ý¿â crash-me µÄ½á¹û¡£¸ü¶àµÄÐÅÏ¢Çë·ÃÎÊ [url]http://dev.mysql.com/tech-resources/benchmarks[/url]¡£


7.1.5 ʹÓÃÄú×Ô¼ºµÄ»ù×¼



ÇëÈ·¶¨¶ÔÄúµÄÊý¾Ý¿â»òÕßÓ¦ÓóÌÐò×ö»ù×¼²âÊÔ£¬ÒÔ·¢ÏÖËüÃÇµÄÆ¿¾±ËùÔÚ¡£½â¾öÕâ¸öÆ¿¾±£¨»òÕßʹÓÃÒ»¸ö¼ÙµÄÄ£¿éÀ´´úÌæ£©Ö®ºó£¬¾ÍÄܺÜÈÝÒ×µØÕÒµ½ÏÂÒ»¸öÆ¿¾±ÁË¡£¼´Ê¹Ó¦ÓóÌÐòµ±Ç°×ÜÌåµÄ±íÏÖ¿ÉÒÔ½ÓÊÜ£¬²»¹ý»¹ÊÇÖÁÉÙÒª×öºÃÕÒµ½Ã¿¸öÆ¿¾±µÄ¼Æ»®£¬Ëµ²»¶¨Ä³ÌìÄú¾ÍÏ£ÍûÓ¦ÓóÌÐòÄÜÓиüºÃµÄÐÔÄÜ¡£

´ÓMySQLµÄ»ù×¼Ì×¼þÖоÍÄÜÕÒµ½Ò»¸ö±ãЯ¿ÉÒÆÖ²µÄ»ù×¼²âÊÔ³ÌÐòÁË¡£ÏêÇéÇë¿´"7.1.4 The MySQL Benchmark Suite"¡£Äú¿ÉÒÔ´Ó»ù×¼Ì×¼þÖеÄÈκÎÒ»¸ö³ÌÐò£¬×öÊʵ±µÄÐÞ¸ÄÒÔÊʺÏÄúµÄÐèÒª¡£Í¨¹ýÕû¸ö·½Ê½£¬Äú¾Í¿ÉÒÔÓи÷ÖÖ²»Í¬µÄ°ì·¨À´½â¾öÎÊÌ⣬֪µÀÄĸö³ÌÐò²ÅÊÇ×î¿ìµÄ¡£

ÁíÒ»¸ö»ù×¼Ì×¼þÊÇ¿ª·ÅÔ´ÂëµÄÊý¾Ý¿â»ù×¼£¬¿ÉÒÔÔÚ [url]http://osdb.sourceforge.net[/url] ÉÏÕÒµ½¡£

µ±ÏµÍ³¸ºÔØÊ®·Ö·±ÖصÄʱºò£¬Í¨³£¾Í»á·¢ÉúÎÊÌâ¡£ÎÒÃǾÍÓкܶà¿Í»§ÁªÏµÎÒÃÇ˵ËûÃÇÓÐÒ»¸ö£¨²âÊÔ¹ýµÄ£©Éú²úϵͳҲÔâÓöÁ˸ºÔØÎÊÌâ¡£ÔںܶàÇé¿öÏ£¬ÐÔÄÜÎÊÌâ¹é½áÓÚÊý¾Ý¿âµÄ»ù±¾Éè¼Æ£¨ÀýÈ磬Ôڸ߸ºÔØÏÂɨÃèÊý¾Ý±íµÄ±íÏÖ²»ºÃ£©¡¢²Ù×÷ϵͳ¡¢»òÕß³ÌÐò¿âµÈÒòËØ¡£ºÜ¶àʱºò£¬ÕâЩÎÊÌâÔÚ»¹Ã»ÓÐÕýʽÓÃÓÚÉú²úǰÏà¶Ô¸üÈÝÒ×½â¾ö¡£

ΪÁ˱ÜÃâ·¢ÉúÕâÑùµÄÎÊÌ⣬×îºÃÈÃÄúµÄÓ¦ÓóÌÐòÔÚ¿ÉÄܵÄ×î²îµÄ¸ºÔØÏÂ×ö»ù×¼²âÊÔ£¡¿ÉÒÔʹÓÃSuper Smack£¬ÔÚ [url]http://jeremy.zawodny.com/mysql/super-smack[/url] ¿ÉÒÔÕÒµ½¡£´ÓËüÃû×ÖµÄÒâ˼¾ÍÄÜÏëµ½£¬Ö»ÒªÄúÔ¸Ò⣬Ëü¾ÍÄÜÈÃÄúµÄϵͳËÀµô£¬Òò´ËÈ·ÈÏÖ»ÔÚ¿ª·¢ÏµÍ³ÉÏ×ö²âÊÔ¡£


7.2 ÓÅ»¯ Select Óï¾ä¼°ÆäËû²éѯ



Ê×ÏÈ£¬Ó°ÏìËùÓÐÓï¾äµÄÒ»¸öÒòËØÊÇ£ºÄúµÄȨÏÞÉèÖÃÔ½¸´ÔÓ£¬ÄÇô¿ªÏú¾ÍÔ½´ó¡£

ʹÓñȽϼòµ¥µÄ GRANT Óï¾äÄÜÈÃMySQL¼õÉÙÔÚ¿Í»§¶ËÖ´ÐÐÓï¾äʱȨÏÞ¼ì²éµÄ¿ªÏú¡£ÀýÈ磬Èç¹ûûÓÐÉ趨ÈÎºÎ±í¼¶»òÕß×ֶμ¶µÄȨÏÞ£¬ÄÇô·þÎñÆ÷¾ÍÎÞÐè¼ì²é tables_priv ºÍ columns_priv ±íµÄ¼Ç¼ÁË¡£Í¬ÑùµØ£¬Èç¹ûûÓжÔÕÊ»§É趨ÈκÎ×ÊÔ´ÏÞÖÆµÄ»°£¬ÄÇô·þÎñÆ÷Ò²¾ÍÎÞÐè×ö×ÊԴʹÓÃͳ¼ÆÁË¡£Èç¹ûÓдóÁ¿²éѯµÄ»°£¬»¨µãʱ¼äÀ´¹æ»®¼òµ¥µÄÊÚȨ»úÖÆÒÔ¼õÉÙ·þÎñÆ÷ȨÏÞ¼ì²éµÄ¿ªÏúÊÇÖµµÃµÄ¡£

Èç¹ûÎÊÌâ´¦ÔÚһЩMySQLÌØ¶¨µÄ±í´ïʽ»òÕߺ¯ÊýÉÏ£¬Ôò¿ÉÒÔͨ¹ý mysql ¿Í»§¶Ë³ÌÐòʹÓà BENCHMARK() º¯Êý×öÒ»¸ö¶¨Ê±²âÊÔ¡£ËüµÄÓï·¨ÊÇ£ºBENCHMARK(loop_count,expression)¡£ÀýÈ磺

mysql> Select BENCHMARK(1000000,1+1);
+------------------------+| BENCHMARK(1000000,1+1) |
+------------------------+|                      0 |
+------------------------+1 row in set (0.32 sec)

ÉÏÊö½á¹ûÊÇÔÚPentium II 400MHzµÄϵͳÉÏÖ´Ðеõ½µÄ¡£Ëü¸æËßÎÒÃÇ£ºMySQLÔÚÕâ¸öϵͳÉÏ¿ÉÒÔÔÚ0.32ÃëÄÚÖ´ÐÐ 1,000,000 ´Î¼òµ¥µÄ¼Ó·¨ÔËËã¡£

ËùÓеÄMySQLº¯Êý¶¼Ó¦¸Ã±»×îÓÅ»¯£¬²»¹ýÈÔÈ»ÓÐЩº¯ÊýÀýÍâ¡£BENCHMARK() ÊÇÒ»¸öÓÃÓÚ¼ì²é²éѯÓï¾äÖÐÊÇ·ñ´æÔÚÎÊÌâµÄ·Ç³£ºÃµÄ¹¤¾ß¡£

ÒúÉú ·¢±íÓÚ 2007-11-16 13:26

7.2.1 EXPLAIN Óï·¨£¨µÃµ½Select µÄÏà¹ØÐÅÏ¢£©



EXPLAIN tbl_name

»òÕß:

EXPLAIN Select select_options

EXPLAIN Óï¾ä¿ÉÒÔ±»µ±×÷ DESCRIBE µÄͬÒå´ÊÀ´Óã¬Ò²¿ÉÒÔÓÃÀ´»ñȡһ¸öMySQLÒªÖ´ÐÐµÄ Select Óï¾äµÄÏà¹ØÐÅÏ¢¡£

    * EXPLAIN tbl_name Óï·¨ºÍ DESCRIBE tbl_name »ò SHOW COLUMNS FROM tbl_name Ò»Ñù¡£
    * µ±ÔÚÒ»¸ö Select Óï¾äǰʹÓùؼü×Ö EXPLAIN ʱ£¬MYSQL»á½âÊÍÁ˼´½«ÈçºÎÔËÐиà Select Óï¾ä£¬ËüÏÔʾÁ˱íÈçºÎÁ¬½Ó¡¢Á¬½ÓµÄ˳ÐòµÈÐÅÏ¢¡£



±¾Õ½ÚÖ÷Òª½²ÊöÁ˵ڶþÖÖ EXPLAIN Ó÷¨¡£

ÔÚ EXPLAIN µÄ°ïÖúÏ£¬Äú¾ÍÖªµÀʲôʱºò¸Ã¸ø±íÌí¼ÓË÷Òý£¬ÒÔʹÓÃË÷ÒýÀ´²éÕҼǼ´Ó¶øÈà Select ÔËÐиü¿ì¡£

Èç¹ûÓÉÓÚ²»Ç¡µ±Ê¹ÓÃË÷Òý¶øÒýÆðһЩÎÊÌâµÄ»°£¬¿ÉÒÔÔËÐÐ ANALYZE TABLE À´¸üиñíµÄͳ¼ÆÐÅÏ¢£¬ÀýÈç¼üµÄ»ùÊý£¬ËüÄܰïÄúÔÚÓÅ»¯·½Ãæ×ö³ö¸üºÃµÄÑ¡Ôñ¡£ÏêÇéÇë¿´"14.5.2.1 ANALYZE TABLE Syntax"¡£

Äú»¹¿ÉÒԲ鿴ÓÅ»¯³ÌÐòÊÇ·ñÒÔ×î¼ÑµÄ˳ÐòÀ´Á¬½ÓÊý¾Ý±í¡£ÎªÁËÈÃÓÅ»¯³ÌÐò°´ÕÕ Select Óï¾äÖеıíÃûµÄ˳Ðò×öÁ¬½Ó£¬¿ÉÒÔÔÚ²éѯµÄ¿ªÊ¼Ê¹Óà Select STRAIGHT_JOIN ¶ø²»Ö»ÊÇ Select¡£

EXPLAIN ·µ»ØÁËÒ»ÐмǼ£¬Ëü°üÀ¨ÁË Select Óï¾äÖÐÓõ½µÄ¸÷¸ö±íµÄÐÅÏ¢¡£ÕâЩ±íÔÚ½á¹ûÖа´ÕÕMySQL¼´½«Ö´ÐеIJéѯÖжÁÈ¡µÄ˳ÐòÁгöÀ´¡£MySQLÓÃÒ»´ÎɨÃè¶à´ÎÁ¬½Ó£¨single-sweep, multi-join£©µÄ·½·¨À´½â¾öÁ¬½Ó¡£ÕâÒâζ×ÅMySQL´ÓµÚÒ»¸ö±íÖжÁȡһÌõ¼Ç¼£¬È»ºóÔÚµÚ¶þ¸ö±íÖвéÕÒµ½¶ÔÓ¦µÄ¼Ç¼£¬È»ºóÔÚµÚÈý¸ö±íÖвéÕÒ£¬ÒÀ´ÎÀàÍÆ¡£µ±ËùÓÐµÄ±í¶¼É¨ÃèÍêÁË£¬ËüÊä³öÑ¡ÔñµÄ×ֶβ¢ÇÒ»ØËÝËùÓÐµÄ±í£¬Ö±µ½ÕÒ²»µ½ÎªÖ¹£¬ÒòΪÓеıíÖпÉÄÜÓжàÌõÆ¥ÅäµÄ¼Ç¼ÏÂÒ»Ìõ¼Ç¼½«´Ó¸Ã±í¶ÁÈ¡£¬ÔÙ´ÓÏÂÒ»¸ö±í¿ªÊ¼¼ÌÐø´¦Àí¡£

ÔÚMySQL version 4.1ÖУ¬EXPLAIN Êä³öµÄ½á¹û¸ñʽ¸Ä±äÁË£¬Ê¹µÃËü¸üÊʺÏÀýÈç UNION Óï¾ä¡¢×Ó²éѯÒÔ¼°ÅÉÉú±íµÄ½á¹¹¡£¸üÁîÈË×¢ÒâµÄÊÇ£¬ËüÐÂÔöÁË2¸ö×ֶΣº id ºÍ select_type¡£µ±ÄãʹÓÃÔçÓÚMySQL 4.1µÄ°æ±¾¾Í¿´²»µ½ÕâЩ×Ö¶ÎÁË¡£

EXPLAIN ½á¹ûµÄÿÐмǼÏÔʾÁËÿ¸ö±íµÄÏà¹ØÐÅÏ¢£¬Ã¿ÐмǼ¶¼°üº¬ÒÔϼ¸¸ö×ֶΣº




id
    ±¾´Î Select µÄ±êʶ·û¡£ÔÚ²éѯÖÐÿ¸ö Select ¶¼ÓÐÒ»¸ö˳ÐòµÄÊýÖµ¡£

     

     
select_type
    Select µÄÀàÐÍ£¬¿ÉÄÜ»áÓÐÒÔϼ¸ÖÖ£º

     

     

     
    SIMPLE
        ¼òµ¥µÄ Select £¨Ã»ÓÐʹÓà UNION »ò×Ó²éѯ£©

         
    PRIMARY
        ×îÍâ²ãµÄ Select¡£

         
    UNION
        µÚ¶þ²ã£¬ÔÚSelect Ö®ºóʹÓÃÁË UNION ¡£

         
    DEPENDENT UNION
        UNION Óï¾äÖеĵڶþ¸ö Select£¬ÒÀÀµÓÚÍⲿ×Ó²éѯ

         
    SUBQUERY
        ×Ó²éѯÖеĵÚÒ»¸ö Select

         
    DEPENDENT SUBQUERY
        ×Ó²éѯÖеĵÚÒ»¸ö SUBQUERY ÒÀÀµÓÚÍⲿµÄ×Ó²éѯ

         
    DERIVED
        ÅÉÉú±í Select£¨FROM ×Ó¾äÖеÄ×Ó²éѯ£©

     

     
table
    ¼Ç¼²éѯÒýÓÃµÄ±í¡£

     

     
type
    ±íÁ¬½ÓÀàÐÍ¡£ÒÔÏÂÁгöÁ˸÷ÖÖ²»Í¬ÀàÐ͵ıíÁ¬½Ó£¬ÒÀ´ÎÊÇ´Ó×îºÃµÄµ½×î²îµÄ£º

     

     
    system
        ±íÖ»ÓÐÒ»ÐмǼ£¨µÈÓÚϵͳ±í£©¡£ÕâÊÇ const ±íÁ¬½ÓÀàÐ͵ÄÒ»¸öÌØÀý¡£

         

         
    const
        ±íÖÐ×î¶àÖ»ÓÐÒ»ÐÐÆ¥ÅäµÄ¼Ç¼£¬ËüÔÚ²éѯһ¿ªÊ¼µÄʱºò¾Í»á±»¶ÁÈ¡³öÀ´¡£ÓÉÓÚÖ»ÓÐÒ»ÐмǼ£¬ÔÚÓàϵÄÓÅ»¯³ÌÐòÀï¸ÃÐмǼµÄ×Ö¶ÎÖµ¿ÉÒÔ±»µ±×÷ÊÇÒ»¸öºã¶¨Öµ¡£const ±í²éѯÆðÀ´·Ç³£¿ì£¬ÒòΪֻҪ¶Áȡһ´Î£¡const ÓÃÓÚÔÚºÍ PRIMARY KEY »ò UNIQUE Ë÷ÒýÖÐÓй̶¨Öµ±È½ÏµÄÇéÐΡ£ÏÂÃæµÄ¼¸¸ö²éѯÖУ¬tbl_name ¾ÍÊÇ const ±íÁË£º

         

        Select * FROM tbl_name Where primary_key=1;Select * FROM tbl_nameWhere primary_key_part1=1 AND primary_key_part2=2;

         

         
    eq_ref
        ´Ó¸Ã±íÖлáÓÐÒ»ÐмǼ±»¶ÁÈ¡³öÀ´ÒԺʹÓǰһ¸ö±íÖжÁÈ¡³öÀ´µÄ¼Ç¼×öÁªºÏ¡£Óë const ÀàÐͲ»Í¬µÄÊÇ£¬ÕâÊÇ×îºÃµÄÁ¬½ÓÀàÐÍ¡£ËüÓÃÔÚË÷ÒýËùÓв¿·Ö¶¼ÓÃÓÚ×öÁ¬½Ó²¢ÇÒÕâ¸öË÷ÒýÊÇÒ»¸ö PRIMARY KEY »ò UNIQUE ÀàÐÍ¡£eq_ref ¿ÉÒÔÓÃÓÚÔÚ½øÐÐ"="×ö±È½Ïʱ¼ìË÷×ֶΡ£±È½ÏµÄÖµ¿ÉÒÔÊǹ̶¨Öµ»òÕßÊDZí´ïʽ£¬±í´ïʾÖпÉÒÔʹÓñíÀïµÄ×ֶΣ¬ËüÃÇÔÚ¶Á±í֮ǰÒѾ­×¼±¸ºÃÁË¡£ÒÔÏµļ¸¸öÀý×ÓÖУ¬MySQLʹÓÃÁË eq_ref Á¬½ÓÀ´´¦Àí ref_table£º

         

        Select * FROM ref_table,other_tableWhere ref_table.key_column=other_table.column;Select * FROM ref_table,other_tableWhere ref_table.key_column_part1=other_table.columnAND ref_table.key_column_part2=1;

         

         
    ref
        ¸Ã±íÖÐËùÓзûºÏ¼ìË÷ÖµµÄ¼Ç¼¶¼»á±»È¡³öÀ´ºÍ´ÓÉÏÒ»¸ö±íÖÐÈ¡³öÀ´µÄ¼Ç¼×÷ÁªºÏ¡£ref ÓÃÓÚÁ¬½Ó³ÌÐòʹÓüüµÄ×î×óǰ׺»òÕßÊǸüü²»ÊÇ PRIMARY KEY »ò UNIQUE Ë÷Òý£¨»»¾ä»°Ëµ£¬¾ÍÊÇÁ¬½Ó³ÌÐòÎÞ·¨¸ù¾Ý¼üֵֻȡµÃÒ»Ìõ¼Ç¼£©µÄÇé¿ö¡£µ±¸ù¾Ý¼üÖµÖ»²éѯµ½ÉÙÊý¼¸ÌõÆ¥ÅäµÄ¼Ç¼ʱ£¬Õâ¾ÍÊÇÒ»¸ö²»´íµÄÁ¬½ÓÀàÐÍ¡£ref »¹¿ÉÒÔÓÃÓÚ¼ìË÷×Ö¶ÎʹÓà = ²Ù×÷·ûÀ´±È½ÏµÄʱºò¡£ÒÔÏµļ¸¸öÀý×ÓÖУ¬MySQL½«Ê¹Óà ref À´´¦Àí ref_table£º

         

        Select * FROM ref_table Where key_column=expr;Select * FROM ref_table,other_tableWhere ref_table.key_column=other_table.column;Select * FROM ref_table,other_tableWhere ref_table.key_column_part1=other_table.columnAND ref_table.key_column_part2=1;

         
    ref_or_null
        ÕâÖÖÁ¬½ÓÀàÐÍÀàËÆ ref£¬²»Í¬µÄÊÇMySQL»áÔÚ¼ìË÷µÄʱºò¶îÍâµÄËÑË÷°üº¬ NULL ÖµµÄ¼Ç¼¡£ÕâÖÖÁ¬½ÓÀàÐ͵ÄÓÅ»¯ÊÇ´ÓMySQL 4.1.1¿ªÊ¼µÄ£¬Ëü¾­³£ÓÃÓÚ×Ó²éѯ¡£ÔÚÒÔϵÄÀý×ÓÖУ¬MySQLʹÓà ref_or_null ÀàÐÍÀ´´¦Àí ref_table£º

         

        Select * FROM ref_tableWhere key_column=expr or key_column IS NULL;

        ÏêÇéÇë¿´"7.2.6 How MySQL Optimizes IS NULL"¡£

         
    index_merge
        ÕâÖÖÁ¬½ÓÀàÐÍÒâζ×ÅʹÓÃÁË Index Merge ÓÅ»¯·½·¨¡£ÕâÖÖÇé¿öÏ£¬key×ֶΰüÀ¨ÁËËùÓÐʹÓõÄË÷Òý£¬key_len °üÀ¨ÁËʹÓõļüµÄ×²¿·Ö¡£ÏêÇéÇë¿´"7.2.5 How MySQL Optimizes OR Clauses"¡£

         

         
    unique_subquery
        ÕâÖÖÀàÐÍÓÃÀýÈçÒ»ÏÂÐÎʽµÄ IN ×Ó²éѯÀ´Ìæ»» ref£º

         

        value IN (Select primary_key FROM single_table Where some_expr)

        unique_subquery Ö»ÊÇÓÃÀ´ÍêÈ«Ìæ»»×Ó²éѯµÄË÷Òý²éÕÒº¯ÊýЧÂʸü¸ßÁË¡£

         
    index_subquery
        ÕâÖÖÁ¬½ÓÀàÐÍÀàËÆ unique_subquery¡£ËüÓÃ×Ó²éѯÀ´´úÌæ IN£¬²»¹ýËüÓÃÓÚÔÚ×Ó²éѯÖÐûÓÐΨһË÷ÒýµÄÇé¿öÏ£¬ÀýÈçÒÔÏÂÐÎʽ£º

         

        value IN (Select key_column FROM single_table Where some_expr)

         

         
    range
        Ö»ÓÐÔÚ¸ø¶¨·¶Î§µÄ¼Ç¼²Å»á±»È¡³öÀ´£¬ÀûÓÃË÷ÒýÀ´È¡µÃÒ»Ìõ¼Ç¼¡£key ×ֶαíʾʹÓÃÁËÄĸöË÷Òý¡£key_len ×ֶΰüÀ¨ÁËʹÓõļüµÄ×²¿·Ö¡£ÕâÖÖÀàÐÍʱ ref ×Ö¶ÎÖµÊÇ NULL¡£range ÓÃÓÚ½«Ä³¸ö×ֶκÍÒ»¸ö¶¨Ö²ÓÃÒÔÏÂÈκβÙ×÷·û±È½Ïʱ =, <>, >, >=, <, <=, IS NULL, <=>, BETWEEN, »ò IN£º

         

        Select * FROM tbl_nameWhere key_column = 10;Select * FROM tbl_nameWhere key_column BETWEEN 10 and 20;Select * FROM tbl_nameWhere key_column IN (10,20,30);Select * FROM tbl_nameWhere key_part1= 10 AND key_part2 IN (10,20,30);

         

         
    index
        Á¬½ÓÀàÐ͸ú ALL Ò»Ñù£¬²»Í¬µÄÊÇËüֻɨÃèË÷ÒýÊ÷¡£Ëüͨ³£»á±È ALL ¿ìµã£¬ÒòΪË÷ÒýÎļþͨ³£±ÈÊý¾ÝÎļþС¡£MySQLÔÚ²éѯµÄ×Ö¶Î֪ʶµ¥¶ÀµÄË÷ÒýµÄÒ»²¿·ÖµÄÇé¿öÏÂʹÓÃÕâÖÖÁ¬½ÓÀàÐÍ¡£

         

         
    ALL
        ½«¶Ô¸Ã±í×öÈ«²¿É¨ÃèÒԺʹÓǰһ¸ö±íÖÐÈ¡µÃµÄ¼Ç¼×÷ÁªºÏ¡£ÕâʱºòÈç¹ûµÚÒ»¸ö±íûÓб»±êʶΪ const µÄ»°¾Í²»´óºÃÁË£¬ÔÚÆäËûÇé¿öÏÂͨ³£ÊǷdz£Ôã¸âµÄ¡£Õý³£µØ£¬¿ÉÒÔͨ¹ýÔö¼ÓË÷ÒýʹµÃÄÜ´Ó±íÖиü¿ìµÄÈ¡µÃ¼Ç¼ÒÔ±ÜÃâ ALL¡£

     

     
possible_keys
    possible_keys ×Ö¶ÎÊÇÖ¸MySQLÔÚËÑË÷±í¼Ç¼ʱ¿ÉÄÜʹÓÃÄĸöË÷Òý¡£×¢Ò⣬Õâ¸ö×Ö¶ÎÍêÈ«¶ÀÁ¢ÓÚ EXPLAIN ÏÔʾµÄ±í˳Ðò¡£Õâ¾ÍÒâζ×Å possible_keys ÀïÃæËù°üº¬µÄË÷Òý¿ÉÄÜÔÚʵ¼ÊµÄʹÓÃÖÐûÓõ½¡£Èç¹ûÕâ¸ö×ֶεÄÖµÊÇ NULL£¬¾Í±íʾûÓÐË÷Òý±»Óõ½¡£ÕâÖÖÇé¿öÏ£¬¾Í¿ÉÒÔ¼ì²é Where ×Ó¾äÖÐÄÄЩ×Ö¶ÎÄÇЩ×Ö¶ÎÊʺÏÔö¼ÓË÷ÒýÒÔÌá¸ß²éѯµÄÐÔÄÜ¡£¾ÍÕâÑù£¬´´½¨Ò»ÏÂË÷Òý£¬È»ºóÔÙÓà EXPLAIN ¼ì²éһϡ£ÏêϸµÄ²é¿´Õ½Ú"14.2.2 Alter TABLE Syntax"¡£Ïë¿´±í¶¼ÓÐʲôË÷Òý£¬¿ÉÒÔͨ¹ý SHOW INDEX FROM tbl_name À´¿´¡£

     



key
    key ×Ö¶ÎÏÔʾÁËMySQLʵ¼ÊÉÏÒªÓõÄË÷Òý¡£µ±Ã»ÓÐÈκÎË÷Òý±»Óõ½µÄʱºò£¬Õâ¸ö×ֶεÄÖµ¾ÍÊÇ NULL¡£ÏëÒªÈÃMySQLÇ¿ÐÐʹÓûòÕߺöÂÔÔÚ possible_keys ×Ö¶ÎÖеÄË÷ÒýÁÐ±í£¬¿ÉÒÔÔÚ²éѯÓï¾äÖÐʹÓùؼü×ÖFORCE INDEX, USE INDEX, »ò IGNORE INDEX¡£Èç¹ûÊÇ MyISAM ºÍ BDB ÀàÐÍ±í£¬¿ÉÒÔʹÓà ANALYZE TABLE À´°ïÖú·ÖÎöʹÓÃʹÓÃÄĸöË÷Òý¸üºÃ¡£Èç¹ûÊÇ MyISAM ÀàÐÍ±í£¬ÔËÐÐÃüÁî myisamchk --analyze Ò²ÊÇÒ»ÑùµÄЧ¹û¡£ÏêϸµÄ¿ÉÒԲ鿴Õ½Ú"14.5.2.1 ANALYZE TABLE Syntax"ºÍ"5.7.2 Table Maintenance and Crash Recovery"¡£

     

     
key_len
    key_len ×Ö¶ÎÏÔʾÁËMySQLʹÓÃË÷ÒýµÄ³¤¶È¡£µ± key ×ֶεÄֵΪ NULL ʱ£¬Ë÷ÒýµÄ³¤¶È¾ÍÊÇ NULL¡£×¢Ò⣬key_len µÄÖµ¿ÉÒÔ¸æËßÄãÔÚÁªºÏË÷ÒýÖÐMySQL»áÕæÕýʹÓÃÁËÄÄЩË÷Òý¡£

     

     
ref
    ref ×Ö¶ÎÏÔʾÁËÄÄЩ×ֶλòÕß³£Á¿±»ÓÃÀ´ºÍ key ÅäºÏ´Ó±íÖвéѯ¼Ç¼³öÀ´¡£

     

     
rows
    rows ×Ö¶ÎÏÔʾÁËMySQLÈÏΪÔÚ²éѯÖÐÓ¦¸Ã¼ìË÷µÄ¼Ç¼Êý¡£

     

     
Extra
    ±¾×Ö¶ÎÏÔʾÁ˲éѯÖÐMySQLµÄ¸½¼ÓÐÅÏ¢¡£ÒÔÏÂÊÇÕâ¸ö×ֶεö²»Í¬ÖµµÄ½âÊÍ£º

     

     
    Distinct
        MySQLµ±ÕÒµ½µ±Ç°¼Ç¼µÄÆ¥ÅäÁªºÏ½á¹ûµÄµÚÒ»Ìõ¼Ç¼֮ºó£¬¾Í²»ÔÙËÑË÷ÆäËû¼Ç¼ÁË¡£

         

         
    Not exists
        MySQLÔÚ²éѯʱ×öÒ»¸ö LEFT JOIN ÓÅ»¯Ê±£¬µ±ËüÔÚµ±Ç°±íÖÐÕÒµ½Á˺ÍǰһÌõ¼Ç¼·ûºÏ LEFT JOIN Ìõ¼þºó£¬¾Í²»ÔÙËÑË÷¸ü¶àµÄ¼Ç¼ÁË¡£ÏÂÃæÊÇÒ»¸öÕâÖÖÀàÐ͵IJéѯÀý×Ó£º

         

        Select * FROM t1 LEFT JOIN t2 ON t1.id=t2.idWhere t2.id IS NULL;

        ¼Ùʹ t2.id ¶¨ÒåΪ NOT NULL¡£ÕâÖÖÇé¿öÏ£¬MySQL½«»áɨÃè±í t1 ²¢ÇÒÓà t1.id µÄÖµÔÚ t2 ÖвéÕҼǼ¡£µ±ÔÚ t2 ÖÐÕÒµ½Ò»ÌõÆ¥ÅäµÄ¼Ç¼ʱ£¬Õâ¾ÍÒâζ×Å t2.id ¿Ï¶¨²»»á¶¼ÊÇ NULL£¬¾Í²»»áÔÙÔÚ t2 ÖвéÕÒÏàͬ id ÖµµÄÆäËû¼Ç¼ÁË¡£Ò²¿ÉÒÔÕâô˵£¬¶ÔÓÚ t1 ÖеÄÿ¸ö¼Ç¼£¬MySQLÖ»ÐèÒªÔÚ t2 ÖÐ×öÒ»´Î²éÕÒ£¬¶ø²»¹ÜÔÚ t2 ÖÐʵ¼ÊÓжàÉÙÆ¥ÅäµÄ¼Ç¼¡£

         
    range checked for each record (index map: #)
        MySQLûÕÒµ½ºÏÊʵĿÉÓõÄË÷Òý¡£È¡´úµÄ°ì·¨ÊÇ£¬¶ÔÓÚǰһ¸ö±íµÄÿһ¸öÐÐÁ¬½Ó£¬Ëü»á×öÒ»¸ö¼ìÑéÒÔ¾ö¶¨¸ÃʹÓÃÄĸöË÷Òý£¨Èç¹ûÓеϰ£©£¬²¢ÇÒʹÓÃÕâ¸öË÷ÒýÀ´´Ó±íÀïÈ¡µÃ¼Ç¼¡£Õâ¸ö¹ý³Ì²»»áºÜ¿ì£¬µ«×ܱÈûÓÐÈκÎË÷Òýʱ×ö±íÁ¬½ÓÀ´µÃ¿ì¡£

         

         
    Using filesort
        MySQLÐèÒª¶îÍâµÄ×öÒ»±é´Ó¶øÒÔÅźõÄ˳ÐòÈ¡µÃ¼Ç¼¡£ÅÅÐò³ÌÐò¸ù¾ÝÁ¬½ÓµÄÀàÐͱéÀúËùÓеļǼ£¬²¢ÇÒ½«ËùÓзûºÏ Where Ìõ¼þµÄ¼Ç¼µÄÒªÅÅÐòµÄ¼üºÍÖ¸Ïò¼Ç¼µÄÖ¸Õë´æ´¢ÆðÀ´¡£ÕâЩ¼üÒѾ­ÅÅÍêÐòÁË£¬¶ÔÓ¦µÄ¼Ç¼Ҳ»á°´ÕÕÅźõÄ˳ÐòÈ¡³öÀ´¡£ÏêÇéÇë¿´"7.2.9 How MySQL Optimizes ORDER BY"¡£

         

         
    Using index
        ×ֶεÄÐÅÏ¢Ö±½Ó´ÓË÷ÒýÊ÷ÖеÄÐÅϢȡµÃ£¬¶ø²»ÔÙȥɨÃèʵ¼ÊµÄ¼Ç¼¡£ÕâÖÖ²ßÂÔÓÃÓÚ²éѯʱµÄ×Ö¶ÎÊÇÒ»¸ö¶ÀÁ¢Ë÷ÒýµÄÒ»²¿·Ö¡£

         

         
    Using temporary
        MySQLÐèÒª´´½¨ÁÙʱ±í´æ´¢½á¹ûÒÔÍê³É²éѯ¡£ÕâÖÖÇé¿öͨ³£·¢ÉúÔÚ²éѯʱ°üº¬ÁËGROUP BY ºÍ ORDER BY ×Ӿ䣬ËüÒÔ²»Í¬µÄ·½Ê½ÁгöÁ˸÷¸ö×ֶΡ£

         

         
    Using where
        Where ×Ӿ佫ÓÃÀ´ÏÞÖÆÄÄЩ¼Ç¼ƥÅäÁËÏÂÒ»¸ö±í»òÕß·¢Ë͸ø¿Í»§¶Ë¡£³ý·ÇÄãÌØ±ðµØÏëҪȡµÃ»òÕß¼ì²é±íÖÖµÄËùÓмǼ£¬·ñÔòµÄ»°µ±²éѯµÄ Extra ×Ö¶ÎÖµ²»ÊÇ Using where ²¢ÇÒ±íÁ¬½ÓÀàÐÍÊÇ ALL »ò index ʱ¿ÉÄܱíʾÓÐÎÊÌâ¡£


    Èç¹ûÄãÏëÒªÈòéѯ¾¡¿ÉÄܵĿ죬ÄÇô¾ÍÓ¦¸Ã×¢Òâ Extra ×ֶεÄֵΪUsing filesort ºÍ Using temporary µÄÇé¿ö¡£



Äã¿ÉÒÔͨ¹ý EXPLAIN µÄ½á¹ûÖÐ rows ×ֶεÄÖµµÄ³Ë»ý´ó¸ÅµØÖªµÀ±¾´ÎÁ¬½Ó±íÏÖÈçºÎ¡£Ëü¿ÉÒÔ´ÖÂԵظæËßÎÒÃÇMySQLÔÚ²éѯ¹ý³ÌÖлá²éѯ¶àÉÙÌõ¼Ç¼¡£Èç¹ûÊÇʹÓÃϵͳ±äÁ¿ max_join_size À´È¡µÃ²éѯ½á¹û£¬Õâ¸ö³Ë»ý»¹¿ÉÒÔÓÃÀ´È·¶¨»áÖ´ÐÐÄÄЩ¶à±í Select Óï¾ä¡£ÏêÇéÇë¿´"7.5.2 Tuning Server Parameters"¡£

ÏÂÃæµÄÀý×ÓչʾÁËÈçºÎͨ¹ý EXPLAIN ÌṩµÄÐÅÏ¢À´½Ï´ó³Ì¶ÈµØÓÅ»¯¶à±íÁªºÏ²éѯµÄÐÔÄÜ¡£

¼ÙÉèÓÐÏÂÃæµÄ Select Óï¾ä£¬Õý´òËãÓà EXPLAIN À´¼ì²â£º

EXPLAIN Select tt.TicketNumber, tt.TimeIn,tt.ProjectReference, tt.EstimatedShipDate,tt.ActualShipDate, tt.ClientID,tt.ServiceCodes, tt.RepetitiveID,tt.CurrentProcess, tt.CurrentDPPerson,tt.RecordVolume, tt.DPPrinted, et.COUNTRY,et_1.COUNTRY, do.CUSTNAMEFROM tt, et, et AS et_1, doWhere tt.SubmitTime IS NULLAND tt.ActualPC = et.EMPLOYIDAND tt.AssignedPC = et_1.EMPLOYIDAND tt.ClientID = do.CUSTNMBR;

ÔÚÕâ¸öÀý×ÓÖУ¬ÏÈ×öÒÔϼÙÉ裺


    * Òª±È½ÏµÄ×ֶζ¨ÒåÈçÏ£º
      Table         Column         Column Type
      tt         ActualPC         CHAR(10)
      tt         AssignedPC         CHAR(10)
      tt         ClientID         CHAR(10)
      et         EMPLOYID         CHAR(15)
      do         CUSTNMBR         CHAR(15)

    * Êý¾Ý±íµÄË÷ÒýÈçÏ£º
      Table         Index
      tt         ActualPC
      tt         AssignedPC
      tt         ClientID
      et         EMPLOYID (primary key)
      do         CUSTNMBR (primary key)

    * tt.ActualPC µÄÖµÊDz»¾ùÔÈ·Ö²¼µÄ¡£


ÔÚÈκÎÓÅ»¯´ëʩδ²Éȡ֮ǰ£¬¾­¹ý EXPLAIN ·ÖÎöµÄ½á¹ûÏÔʾÈçÏ£º



table type possible_keys key  key_len ref  rows  Extraet    ALL  PRIMARY       NULL NULL    NULL 74do    ALL  PRIMARY       NULL NULL    NULL 2135et_1  ALL  PRIMARY       NULL NULL    NULL 74tt    ALL  AssignedPC,   NULL NULL    NULL 3872ClientID,ActualPCrange checked for each record (key map: 35)

ÓÉÓÚ×Ö¶Î type µÄ¶ÔÓÚÿ¸ö±íÖµ¶¼ÊÇ ALL£¬Õâ¸ö½á¹ûÒâζ×ÅMySQL¶ÔËùÓеıí×öÒ»¸öµÏ¿¨¶û»ý£»Õâ¾ÍÊÇ˵£¬Ã¿Ìõ¼Ç¼µÄ×éºÏ¡£Õ⽫ÐèÒª»¨ºÜ³¤µÄʱ¼ä£¬ÒòΪÐèҪɨÃèÿ¸ö±í×ܼǼÊý³Ë»ýµÄ×ܺ͡£ÔÚÕâÇé¿öÏ£¬ËüµÄ»ýÊÇ 74 * 2135 * 74 * 3872 = 45,268,558,720 Ìõ¼Ç¼¡£Èç¹ûÊý¾Ý±í¸ü´óµÄ»°£¬Äã¿ÉÒÔÏëÏóÒ»ÏÂÐèÒª¶à³¤µÄʱ¼ä¡£

ÔÚÕâÀïÓиöÎÊÌâÊǵ±×ֶζ¨ÒåÒ»ÑùµÄʱºò£¬MySQL¾Í¿ÉÒÔÔÚÕâЩ×Ö¶ÎÉϸü¿ìµÄÊÇÓÃË÷Òý£¨¶Ô ISAM ÀàÐ͵ıíÀ´Ëµ£¬³ý·Ç×ֶζ¨ÒåÍêȫһÑù£¬·ñÔò²»»áʹÓÃË÷Òý£©¡£ÔÚÕâ¸öǰÌáÏ£¬VARCHAR ºÍ CHARÊÇÒ»ÑùµÄ³ý·ÇËüÃǶ¨ÒåµÄ³¤¶È²»Ò»Ö¡£ÓÉÓÚ tt.ActualPC ¶¨ÒåΪ CHAR(10)£¬et.EMPLOYID ¶¨ÒåΪ CHAR(15)£¬¶þÕß³¤¶È²»Ò»Ö¡£
ΪÁ˽â¾öÕâ¸öÎÊÌ⣬ÐèÒªÓà Alter TABLE À´¼Ó´ó ActualPC µÄ³¤¶È´Ó10µ½15¸ö×Ö·û£º

mysql> Alter TABLE tt MODIFY ActualPC VARCHAR(15);

ÏÖÔÚ tt.ActualPC ºÍ et.EMPLOYID ¶¼ÊÇ VARCHAR(15)
ÁË¡£ÔÙÀ´Ö´ÐÐÒ»´Î EXPLAIN Óï¾ä¿´¿´½á¹û£º

table type   possible_keys key     key_len ref         rows    Extratt    ALL    AssignedPC,   NULL    NULL    NULL        3872    UsingClientID,                                         whereActualPCdo    ALL    PRIMARY       NULL    NULL    NULL        2135range checked for each record (key map: 1)et_1  ALL    PRIMARY       NULL    NULL    NULL        74range checked for each record (key map: 1)et    eq_ref PRIMARY       PRIMARY 15      tt.ActualPC 1

Õ⻹²»¹»£¬Ëü»¹¿ÉÒÔ×öµÄ¸üºÃ£ºÏÖÔÚ rows Öµ³Ë»ýÒѾ­ÉÙÁË74±¶¡£Õâ´Î²éѯÐèÒªÓÃ2ÃëÖÓ¡£
µÚ¶þ¸ö¸Ä±äÊÇÏû³ýÔÚ±È½Ï tt.AssignedPC = et_1.EMPLOYID ºÍ tt.ClientID = do.CUSTNMBR ÖÐ×ֶεij¤¶È²»Ò»ÖÂÎÊÌ⣺

mysql> Alter TABLE tt MODIFY AssignedPC VARCHAR(15),->                MODIFY ClientID   VARCHAR(15);

ÏÖÔÚ EXPLAIN µÄ½á¹ûÈçÏ£º

table type   possible_keys key      key_len ref           rows Extraet    ALL    PRIMARY       NULL     NULL    NULL          74tt    ref    AssignedPC,   ActualPC 15      et.EMPLOYID   52   UsingClientID,                                         whereActualPCet_1  eq_ref PRIMARY       PRIMARY  15      tt.AssignedPC 1do    eq_ref PRIMARY       PRIMARY  15      tt.ClientID   1

Õâ¿´ÆðÀ´ÒѾ­ÊÇÄÜ×öµÄ×îºÃµÄ½á¹ûÁË¡£
ÒÅÁôÏÂÀ´µÄÎÊÌâÊÇ£¬MySQLĬÈϵØÈÏΪ×Ö¶Îtt.ActualPC µÄÖµÊǾùÔÈ·Ö²¼µÄ£¬È»¶ø±í tt ²¢·ÇÈç´Ë¡£ÐҺã¬ÎÒÃÇ¿ÉÒԺܷ½±ãµÄÈÃMySQL·ÖÎöË÷ÒýµÄ·Ö²¼£º

mysql> ANALYZE TABLE tt;

µ½´ËΪֹ£¬±íÁ¬½ÓÒѾ­ÓÅ»¯µÄºÜÍêÃÀÁË£¬EXPLAIN µÄ½á¹ûÈçÏ£º

table type   possible_keys key     key_len ref           rows Extratt    ALL    AssignedPC    NULL    NULL    NULL          3872 UsingClientID,                                        whereActualPCet    eq_ref PRIMARY       PRIMARY 15      tt.ActualPC   1et_1  eq_ref PRIMARY       PRIMARY 15      tt.AssignedPC 1do    eq_ref PRIMARY       PRIMARY 15      tt.ClientID   1

Çë×¢Ò⣬EXPLAIN ½á¹ûÖÐµÄ rows ×ֶεÄÖµÒ²ÊÇMySQLµÄÁ¬½ÓÓÅ»¯³ÌÐò´óÖ²²âµÄ£¬Çë¼ì²éÕâ¸öÖµ¸úÕæÊµÖµÊÇ·ñ»ù±¾Ò»Ö¡£Èç¹û²»ÊÇ£¬¿ÉÒÔͨ¹ýÔÚ Select Óï¾äÖÐʹÓà STRAIGHT_JOIN À´È¡µÃ¸üºÃµÄÐÔÄÜ£¬Í¬Ê±¿ÉÒÔÊÔ×ÅÔÚ FROM
·Ö¾äÖÐÓò»Í¬µÄ´ÎÐòÁгö¸÷¸ö±í¡£

ÒúÉú ·¢±íÓÚ 2007-11-16 13:26

7.2.2 ¹ÀËã²éѯÐÔÄÜ





ÔÚ´ó¶àÊýÇé¿öÏ£¬¿ÉÒÔͨ¹ýͳ¼Æ´ÅÅÌËÑË÷´ÎÊýÀ´¹ÀËã²éѯµÄÐÔÄÜ¡£¶ÔС±íÀ´Ëµ£¬Í¨³£Çé¿öÏÂÖ»ÐèÒªËÑË÷Ò»´Î´ÅÅ̾ÍÄÜÕÒµ½¶ÔÓ¦µÄ¼Ç¼£¨ÒòΪË÷Òý¿ÉÄÜÒѾ­»º´æÆðÀ´ÁË£©¡£¶Ô´ó±íÀ´Ëµ£¬´óÖ¿ÉÒÔÕâô¹ÀË㣬ËüʹÓÃBÊ÷×öË÷Òý£¬ÏëÒªÕÒµ½Ò»Ìõ¼Ç¼´ó¸ÅÐèÒªËÑË÷µÄ´ÎÊýΪ£ºlog(row_count) / log(index_block_length / 3 * 2 / (index_length + data_pointer_length)) + 1¡£

ÔÚMySQLÖУ¬Ò»¸öË÷Òý¿éͨ³£ÊÇ1024bytes£¬Êý¾ÝÖ¸Õëͨ³£ÊÇ4bytes¡£¶ÔÓÚÒ»¸öÓÐ500,000Ìõ¼Ç¼¡¢Ë÷Òý³¤¶ÈΪ3bytes£¨medium integer£©µÄ±íÀ´Ëµ£¬¸ù¾ÝÉÏÃæµÄ¹«Ê½¼ÆËãµÃµ½ÐèÒª×ö log(500,000)/log(1024/3*2/(3+4)) + 1 = 4 ´ÎËÑË÷¡£

Õâ¸ö±íµÄË÷Òý´ó¸ÅÐèÒª 500,000 * 7 * 3/2 = 5.2MBµÄ´æ´¢¿Õ¼ä£¨¼Ù¶¨µäÐ͵ÄË÷Òý»º³åÇøµÄ2/3£©£¬Òò´ËÓ¦¸Ã»áÓиü¶àµÄË÷ÒýÔÚÄÚ´æÖУ¬²¢ÇÒ¿ÉÄÜÖ»ÐèÒª1µ½2´Îµ÷ÓþÍÄÜÕÒµ½¶ÔÓ¦µÄ¼Ç¼¡£

¶ÔÓÚдÀ´Ëµ£¬´ó¸ÅÐèÒª4´Î£¨ÉõÖÁ¸ü¶à£©ËÑË÷²ÅÄÜÕÒµ½ÐµÄË÷ÒýλÖ㬸üмǼʱͨ³£ÐèÒª2´ÎËÑË÷¡£

Çë×¢Òâ£¬Ç°ÃæµÄÌÖÂÛÖв¢Ã»ÓÐÌáµ½Ó¦ÓóÌÐòµÄÐÔÄÜ»áÒòΪlog NµÄÖµÔ½´ó¶øÏ½µ¡£Ö»ÒªËùÓеĶ«Î÷¶¼ÄÜÓɲÙ×÷ϵͳ»òÕßSQL·þÎñÆ÷»º´æÆðÀ´£¬ÄÇôÐÔÄÜÖ»»áÒòΪÊý¾Ý±íÔ½´ó¶øÉÔ΢Ͻµ¡£µ±Êý¾ÝÔ½À´Ô½´óÖ®ºó£¬¾Í²»ÄÜÈ«²¿·Åµ½»º´æÖÐÈ¥ÁË£¬¾Í»áÔ½À´Ô½ÂýÁË£¬³ý·ÇÓ¦ÓóÌÐòÊDZ»´ÅÅÌËÑË÷Ô¼ÊøµÄ£¨Ëü¸úËæ×ŵÄlog NÖµÔö¼Ó¶øÔö¼Ó£©¡£ÎªÁ˱ÜÃâÕâÖÖÇé¿ö£¬¿ÉÒÔÔÚÊý¾ÝÁ¿Ôö´óÒÔºóÒ²Ëæ×ÅÔö´óË÷Òý»º´æÈÝÁ¿¡£¶Ô MyISAM ÀàÐͱíÀ´Ëµ£¬Ë÷Òý»º´æÈÝÁ¿ÊÇÓÉϵͳ±äÁ¿ key_buffer_size ¿ØÖƵġ£ÏêÇéÇë¿´"7.5.2 Tuning Server Parameters"¡£


7.2.3 Select ²éѯµÄËÙ¶È



ͨ³£Çé¿öÏ£¬ÏëÒªÈÃÒ»¸ö±È½ÏÂýµÄ Select ... Where ²éѯ±äµÃ¸ü¿ìµÄµÚÒ»¼þʾÍÊÇ£¬Ïȼì²é¿´¿´ÊÇ·ñ¿ÉÒÔÔö¼ÓË÷Òý¡£ËùÓжԲ»Í¬±íµÄ·ÃÎʶ¼Í¨³£Ê¹ÓÃË÷Òý¡£¿ÉÒÔʹÓà EXPLAIN Óï¾äÀ´ÅÐ¶Ï Select ʹÓÃÁËÄÄЩË÷Òý¡£ÏêÇéÇë¿´"7.4.5 How MySQL Uses Indexes"ºÍ"7.2.1 EXPLAIN Syntax (Get Information About a Select)"¡£

ÒÔÏÂÊǼ¸¸ö³£ÓõÄÌá¸ß MyISAM ±í²éѯËٶȵÄÖҸ棺

      

      
    * ÏëÒªÈÃMySQL½«²éѯÓÅ»¯µÄËٶȸü¿ìЩ£¬¿ÉÒÔÔÚÊý¾Ý±íÒѾ­¼ÓÔØÍêÈ«²¿Êý¾ÝºóÖ´ÐÐÐÐ ANALYZE TABLE »òÔËÐÐ myisamchk --analyze ÃüÁî¡£Ëü¸üÐÂÁËÿ¸öË÷Òý²¿·ÖµÄÖµ£¬Õâ¸öÖµÒâζ×ÅÏàͬ¼Ç¼µÄƽ¾ùÖµ£¨¶ÔÓÚΨһË÷ÒýÀ´Ëµ£¬Õâ¸öÖµÔòÒ»Ö±¶¼ÊÇ 1£©¡£MySQL¾Í»áÔÚµ±ÄãʹÓûùÓÚÒ»¸ö·ÇºãÁ¿±í´ïʽµÄÁ½±íÁ¬½Óʱ£¬¸ù¾ÝÕâ¸öÖµÀ´¾ö¶¨Ê¹ÓÃÄĸöË÷Òý¡£ÏëÒª²é¿´½á¹û£¬¿ÉÒÔÔÚ·ÖÎöÍêÊý¾Ý±íºóÔËÐÐ SHOW INDEX FROM tbl_name ²é¿´ Cardinality ×ֶεÄÖµ¡£myisamchk --description --verbose ÏÔʾÁËË÷ÒýµÄ·Ö²¼ÐÅÏ¢¡£

      

      
    * ÏëÒª¸ù¾ÝÒ»¸öË÷ÒýÀ´ÅÅÐòÊý¾Ý£¬¿ÉÒÔÔËÐÐ myisamchk --sort-index --sort-records=1 £¨Èç¹ûÏëÒªÔÚË÷Òý 1 ÉÏ×öÅÅÐò£©¡£Õâ¶ÔÓÚÓÐÒ»¸öΨһË÷Òý²¢ÇÒÏë¸ù¾ÝÕâ¸öË÷ÒýµÄ˳ÐòÒÀ´Î¶ÁÈ¡¼Ç¼µÄ»°À´ËµÊÇÒ»¸öÌá¸ß²éѯËٶȵĺð취¡£²»¹ýҪעÒâµÄÊÇ£¬µÚÒ»´ÎÔÚÒ»¸ö´ó±íÉÏ×öÅÅÐòµÄ»°½«»áºÄ·ÑºÜ³¤Ê±¼ä¡£


7.2.4 MySQLÈçºÎÓÅ»¯ Where ×Ó¾ä



Õâ¸öÕ½ڽ²ÊöÁËÓÅ»¯³ÌÐòÈçºÎ´¦Àí Where ×Ӿ䡣Àý×ÓÖÐʹÓÃÁË Select Óï¾ä£¬µ«ÊÇÔÚ Delete ºÍ Update Óï¾äÖÐ¶Ô Where ×Ó¾äµÄÓÅ»¯ÊÇÒ»ÑùµÄ¡£

×¢Ò⣬¹ØÓÚMySQLÓÅ»¯µÄ¹¤×÷»¹ÔÚ¼ÌÐø£¬Òò´Ë±¾Õ½ڻ¹Ã»½áÊø¡£MySQL×öÁ˺ܶàÓÅ»¯¹¤×÷£¬¶ø²»½ö½öÊÇÎĵµÖÐÌáµ½µÄÕâЩ¡£

MySQLµÄһЩÓÅ»¯×ö·¨ÈçÏ£º

      

      
    * È¥³ý²»±ØÒªµÄÀ¨ºÅ£º

      

         ((a AND b) AND c or (((a AND b) AND (c AND d))))    -> (a AND b AND c) or (a AND b AND c AND d)   

      
    * Õ¹¿ª³£Á¿£º

      

         (a<b AND b=c) AND a=5    -> b>5 AND b=c AND a=5   

      
    * È¥³ý³£Á¿Ìõ¼þ£¨ÔÚÕ¹¿ª³£Á¿Ê±ÐèÒª£©£º

      

         (B>=5 AND B=5) or (B=6 AND 5=5) or (B=7 AND 5=6)    -> B=5 or B=6   

      
    * ³£Á¿±í´ïʾÔÚË÷ÒýÖÐÖ»¼ÆËãÒ»´Î

      

      
    * ÔÚµ¥¶ÀÒ»¸ö±íÉÏ×ö COUNT(*) ¶ø²»Ê¹Óà Where ʱ£¬ ¶ÔÓÚ MyISAM ºÍ HEAP ±í¾Í»áÖ±½Ó´Ó±íÐÅÏ¢ÖмìË÷½á¹û¡£ÔÚµ¥¶ÀÒ»¸ö±íÉÏ×öÈκαí NOT NULL ´ïʽ²éѯʱҲÊÇÕâÑù×ö¡£

      

      
    * Ô¤ÏÈ̽²âÎÞЧµÄ³£Á¿±í´ïʽ¡£MySQL»á¿ìËÙ̽²âһЩ²»¿ÉÄÜµÄ Select Óï¾ä²¢ÇÒ²»·µ»ØÈκμǼ¡£

      

      
    * µ±Ã»Óà GROUP BY »ò·Ö×麯Êýʱ£¬HAVING ºÍ Where ºÏ²¢£¨COUNT(), MIN() µÈÒ²ÊÇÈç´Ë£©¡£

      

      
    * Ϊ±íÁ¬½ÓÖеÄÿ¸ö±í¹¹ÔìÒ»¸ö¼ò½àµÄ Where Óï¾ä£¬ÒԵõ½¸ü¿ìµÄ Where ¼ÆËãÖµ²¢ÇÒ¾¡¿ìÌø¹ý¼Ç¼¡£

      

      
    * ²éѯÖÐËùÓеij£Á¿±í¶¼»á±ÈÆäËû±í¸üÔç¶ÁÈ¡¡£Ò»¸ö³£Á¿±í·ûºÏÒÔϼ¸¸öÌõ¼þ£º

          o ¿Õ±í»òÕßÖ»ÓÐÒ»Ìõ¼Ç¼¡£

            

            
          o ÓëÔÚÒ»¸ö UNIQUE Ë÷Òý¡¢»òÒ»¸ö PRIMARY KEY µÄ Where ×Ó¾äÒ»ÆðʹÓÃµÄ±í£¬ÕâÀïËùÓеÄË÷Òý²¿·ÖºÍ³£Êý±í´ïʽ×ö±È½Ï²¢ÇÒË÷Òý²¿·Ö±»¶¨ÒåΪ NOT NULL¡£

      ÒÔÏµļ¸¸ö±í¶¼»á±»µ±³É³£Á¿±í£º

      

      Select * FROM t Where primary_key=1;    Select * FROM t1,t2    Where t1.primary_key=1 AND t2.primary_key=t1.id;   

      
    * MySQL»á½ø¸÷ÖÖ¿ÉÄÜÕÒµ½±íÁ¬½Ó×îºÃµÄÁ¬½Ó·½·¨¡£ Èç¹ûÔÚ orDER BY ºÍ GROUP BY ×Ó¾äÖеÄËùÓÐ×ֶζ¼À´×Ôͬһ¸ö±íµÄ»°£¬ÄÇôÔÚÁ¬½ÓʱÕâ¸ö±í¾Í»áÓÅÏÈ´¦Àí¡£

      

      
    * Èç¹ûÓÐ ORDER BY ×Ó¾äºÍÒ»¸ö²»Í¬µÄ GROUP BY ×Ӿ䣬»òÕßÈç¹û ORDER BY »ò GROUP BY ÖеÄ×ֶζ¼À´×ÔÆäËûµÄ±í¶ø·ÇÁ¬½Ó˳ÐòÖеĵÚÒ»¸ö±íµÄ»°£¬¾Í»á´´½¨Ò»¸öÁÙʱ±íÁË¡£

      

      
    * Èç¹ûʹÓà SQL_SMALL_RESULT£¬MySQL¾Í»áʹÓÃÄÚ´æÁÙʱ±íÁË¡£

      

      
    * ËùÓеıíË÷Òý¶¼»á²éѯ£¬×îºÃµÄÇé¿ö¾ÍÊÇËùÓеÄË÷Òý¶¼»á±»Óõ½£¬³ý·ÇÓÅ»¯³ÌÐòÈÏΪȫ±íɨÃèµÄЧÂʸü¸ß¡£Í¬Ê±£¬Êý¾Ý±íɨÃèÊÇ»ùÓÚÅжÏ×îºÃµÄË÷Òý·¶Î§³¬¹ýÊý¾Ý±íµÄ 30%¡£ÏÖÔÚ£¬ÓÅ»¯³ÌÐò¸´ÔÓ¶àÁË£¬Ëü»ùÓÚ¶ÔһЩ¸½¼ÓÒòËØµÄ¹À¼Æ£¬ÀýÈç±í´óС£¬¼Ç¼×ÜÊý£¬I/O¿é´óС£¬Òò´Ë¾Í²»Äܸù¾ÝÒ»¸ö¹Ì¶¨µÄ°Ù·Ö±ÈÀ´¾ö¶¨ÊÇÑ¡ÔñʹÓÃË÷Òý»¹ÊÇÖ±½ÓɨÃèÊý¾Ý±í¡£

      

      
    * ÔÚijЩÇé¿öÏ£¬MySQL¿ÉÒÔÖ±½Ó´ÓË÷ÒýÖÐÈ¡µÃ¼Ç¼¶øÎÞÐè²éѯÊý¾ÝÎļþ¡£Èç¹ûËùÓÐÔÚË÷ÒýÖÐʹÓõÄ×ֶζ¼ÊÇÊý×ÖÀàÐ͵ϰ£¬Ö»ÐèÒªÓÃË÷ÒýÊ÷¾ÍÄÜÍê³É²éѯ¡£

      

      
    * ÿÌõ¼Ç¼Êä³ö֮ǰ£¬ÄÇЩûÓÐÆ¥Åä HAVING ×Ó¾äµÄ¾Í»á±»Ìø¹ý¡£


ÒÔϼ¸¸ö²éѯËٶȷdz£¿ì£º



Select COUNT(*) FROM tbl_name;Select MIN(key_part1),MAX(key_part1) FROM tbl_name;Select MAX(key_part2) FROM tbl_nameWhere key_part1=constant;Select ... FROM tbl_nameorDER BY key_part1,key_part2,... LIMIT 10;Select ... FROM tbl_nameorDER BY key_part1 DESC, key_part2 DESC, ... LIMIT 10;

ÒÔϼ¸¸ö²éѯ¶¼ÊÇʹÓÃË÷ÒýÊ÷£¬¼ÙʹÄÇЩË÷Òý×ֶζ¼ÊÇÊý×ÖÐÍ£º

Select key_part1,key_part2 FROM tbl_name Where key_part1=val;Select COUNT(*) FROM tbl_nameWhere key_part1=val1 AND key_part2=val2;Select key_part2 FROM tbl_name GROUP BY key_part1;

ÒÔϼ¸¸ö²éѯʹÓÃË÷ÒýÀ´È¡µÃ¾­¹ý˳ÐòÅÅÐòºóµÄ¼Ç¼¶øÎÞÐè¾­¹ý¶ÀÁ¢µÄÅÅÐò²½Ö裺

Select ... FROM tbl_nameorDER BY key_part1,key_part2,... ;Select ... FROM tbl_nameorDER BY key_part1 DESC, key_part2 DESC, ... ;


7.2.5 MySQL ÈçºÎÓÅ»¯ OR ×Ó¾ä

Index Merge ·½·¨ÓÃÓÚʹÓà ref, ref_or_null, »ò range ɨÃèÈ¡µÃµÄ¼Ç¼ºÏ²¢ÆðÀ´·Åµ½Ò»Æð×÷Ϊ½á¹û¡£ÕâÖÖ·½·¨ÔÚ±íÌõ¼þÊÇ»òÌõ¼þ ref, ref_or_null, »ò range £¬²¢ÇÒÕâЩÌõ¼þ¿ÉÒÔÓò»Í¬µÄ¼üʱ²ÉÓá£
"join"ÀàÐ͵ÄÓÅ»¯ÊÇ´Ó MySQL 5.0.0 ¿ªÊ¼²ÅÓе쬴ú±íÕßÔÚË÷ÒýµÄÐÔÄÜÉÏÓÐ×űêÖ¾ÐԵĸĽø£¬ÒòΪʹÓÃÀϹæÔòµÄ»°£¬Êý¾Ý¿â×î¶àÖ»ÄܶÔÿ¸öÒýÓñíʹÓÃÒ»¸öË÷Òý¡£
ÔÚ EXPLAIN µÄ½á¹ûÖУ¬ÕâÖÖ·½·¨ÔÚ type ×Ö¶ÎÖбíÏÖΪ index_merge¡£ÕâÖÖÇé¿öÏ£¬key ×ֶΰüº¬ÁËËùÓÐʹÓõÄË÷ÒýÁÐ±í£¬²¢ÇÒ key_len ×ֶΰüº¬ÁËʹÓõÄË÷ÒýµÄ×Ë÷Òý²¿·ÖÁÐ±í¡£
ÀýÈ磺



Select * FROM tbl_name Where key_part1 = 10 or key_part2 = 20;Select * FROM tbl_nameWhere (key_part1 = 10 or key_part2 = 20) AND non_key_part=30;Select * FROM t1,t2Where (t1.key1 IN (1,2) or t1.key2 LIKE 'value%')AND t2.key1=t1.some_col;Select * FROM t1,t2Where t1.key1=1AND (t2.key1=t1.some_col or t2.key2=t1.some_col2);


7.2.6 MySQL ÈçºÎÓÅ»¯ IS NULL

MySQLÔÚ col_name IS NULL ʱ×öºÍ col_name = constant_value Ò»ÑùµÄÓÅ»¯¡£ÀýÈ磬MySQLʹÓÃË÷Òý»òÕß·¶Î§À´¸ù¾Ý IS NUL LËÑË÷ NULL¡£



Select * FROM tbl_name Where key_col IS NULL;Select * FROM tbl_name Where key_col <=> NULL;Select * FROM tbl_nameWhere key_col=const1 or key_col=const2 or key_col IS NULL;

Èç¹ûÒ»¸ö Where ×Ó¾ä°üÀ¨ÁËÒ»¸ö col_name IS NULL Ìõ¼þ£¬²¢ÇÒÕâ¸ö×Ö¶ÎÉùÃ÷Ϊ NOT NULL£¬ÄÇôÕâ¸ö±í´ïʽ¾Í»á±»ÓÅ»¯¡£µ±×ֶοÉÄÜÎÞÂÛÈçºÎ¶¼»á²úÉú NULL ֵʱ£¬¾Í²»»áÔÙ×öÓÅ»¯ÁË£»ÀýÈ磬µ±ËüÀ´×ÔÒ»¸ö LEFT JOIN ÖÐÓұߵÄÒ»¸ö±íʱ¡£

MySQL 4.1.1»ò¸ü¸ß»á¶ÔÁ¬½Ó col_name = expr AND col_name IS NULL ×ö¶îÍâµÄÓÅ»¯£¬ ³£¼ûµÄ¾ÍÊÇ×Ó²éѯ¡£EXPLAIN µ±ÓÅ»¯Æð×÷ÓÃʱ»áÏÔʾ ref_or_null¡£

ÓÅ»¯³ÌÐò»áΪÈκÎË÷Òý²¿·Ö´¦Àí IS NULL¡£

ÒÔϼ¸¸öÀý×ÓÖж¼×öÓÅ»¯ÁË£¬¼Ùʹ×Ö¶Î a ºÍ ±í t2 ÖÐ b ÓÐË÷ÒýÁË£º

Select * FROM t1 Where t1.a=expr or t1.a IS NULL;Select * FROM t1,t2 Where t1.a=t2.a or t2.a IS NULL;Select * FROM t1,t2Where (t1.a=t2.a or t2.a IS NULL) AND t2.b=t1.b;Select * FROM t1,t2Where t1.a=t2.a AND (t2.b=t1.b or t2.b IS NULL);Select * FROM t1,t2Where (t1.a=t2.a AND t2.a IS NULL AND ...)or (t1.a=t2.a AND t2.a IS NULL AND ...);

ref_or_null Ê×ÏȶÁÈ¡ÒýÓüü£¬È»ºó¶ÀÁ¢É¨Ãè¼üֵΪ NULL µÄ¼Ç¼¡£

Çë×¢Ò⣬ÓÅ»¯³ÌÐòÖ»»á´¦ÀíÒ»¸ö IS NULL ¼¶±ð¡£ÏÂÃæµÄ²éѯÖУ¬MySQLÖ»»áʹÓüüÀ´²éѯ±í´ïʽ (t1.a=t2.a AND t2.a IS NULL) ¶øÎÞ·¨Ê¹ÔÚ b ÉÏʹÓÃË÷Òý²¿·Ö£º

Select * FROM t1,t2Where (t1.a=t2.a AND t2.a IS NULL)or (t1.b=t2.b AND t2.b IS NULL);


7.2.7 MySQL ÈçºÎÓÅ»¯ DISTINCT



ÔںܶàÇé¿öÏ£¬DISTINCT ºÍ ORDER BY Ò»ÆðʹÓÃʱ¾Í»á´´½¨Ò»¸öÁÙʱ±í¡£

×¢Ò⣬ÓÉÓÚ DISTINCT ¿ÉÄÜÐèÒªÓõ½ GROUP BY£¬¾ÍÐèÒªÃ÷°×MySQLÔÚ ORDER BY »ò HAVING ×Ó¾äÀïµÄ×ֶβ»ÔÚÑ¡ÖеÄ×Ö¶ÎÁбíÖÐʱÊÇÔõô´¦ÀíµÄ¡£ÏêÇéÇë¿´"13.9.3 GROUP BY with Hidden Fields"¡£

µ± LIMIT row_count ºÍ DISTINCT Ò»ÆðʹÓÃʱ£¬MySQLÔÚÕÒµ½ row_count ²»Í¬¼Ç¼ºó¾Í»áÁ¢¿ÌÍ£Ö¹ËÑË÷ÁË¡£

Èç¹ûûÓÐÓõ½À´×Ô²éѯÖÐÈκαíµÄ×Ö¶Îʱ£¬MySQLÔÚÕÒµ½µÚÒ»¸öÆ¥Åä¼Ç¼ºó¾Í»áÍ£Ö¹ËÑË÷ÕâЩûûÓõ½µÄ±íÁË¡£ÔÚÏÂÃæµÄÇé¿öÖУ¬¼Ùʹ t1 ÔÚ t2 ǰ¾ÍʹÓÃÁË£¨¿ÉÒÔͨ¹ý EXPLAIN ·ÖÎöÖªµÀ£©£¬MySQL¾Í»áÔÚ´Ó t2 ÖÐÕÒµ½µÚÒ»Ìõ¼Ç¼ºó¾Í²»ÔÙ¶Á t2 ÁË£¨ÎªÁËÄܺÍÖÐ t1 µÄÈκÎÌØ¶¨¼Ç¼ƥÅ䣩£º

Select DISTINCT t1.a FROM t1,t2 where t1.a=t2.a;


7.2.8 MySQL ÈçºÎÓÅ»¯ LEFT JOIN ºÍ RIGHT JOIN

A LEFT JOIN B join_condition ÔÚMySQLÖÐʵÏÖÈçÏ£º

      

      
    * ±í B ÒÀÀµÓÚ±í A ÒÔ¼°ÆäÒÀÀµµÄËùÓÐ±í¡£

      

      
    * ±í A ÒÀÀµÓÚÔÚ LEFT JOIN Ìõ¼þÖеÄËùÓÐ±í£¨³ýÁË B£©¡£

      

      
    * LEFT JOIN Ìõ¼þÓÃÓÚ¾ö¶¨ÈçºÎ´Ó±í B ÖжÁÈ¡¼Ç¼ÁË£¨»»¾ä»°Ëµ£¬Where ×Ó¾äÖеÄÈκÎÌõ¼þ¶¼¶Ô´Ë²»Æð×÷Óã©¡£

      

      
    * ËùÓбê×¼µÄÁ¬½ÓÓÅ»¯¶¼»áÖ´ÐУ¬ÀýÍâµÄÇé¿öÊÇÓÐÒ»¸ö±í×ÜÊÇÔÚËüÒÀÀµµÄËùÓбíÖ®ºó±»¶ÁÈ¡¡£Èç¹ûÕâÊÇÒ»¸öÑ­»·µÄÒÀÀµ¹ØÏµ£¬ÄÇôMySQL»áÈÏΪÕâÊÇ´íÎóµÄ¡£

      

      
    * ËùÓеıê×¼ Where ÓÅ»¯¶¼»áÖ´ÐС£

      

      
    * Èç¹û A ÖÐÓÐÒ»Ìõ¼Ç¼ƥÅäÁË Where ×Ӿ䣬µ«ÊÇ B ÖÐûÓÐÈκμǼƥÅä ON Ìõ¼þ£¬ÄÇô¾Í»á²úÉúÒ»Ìõ B ¼Ç¼£¬ËüµÄ×Ö¶Îֵȫ¶¼±»ÖÃΪ NULL¡£

      

      
    * Èç¹ûʹÓà LEFT JOIN À´ËÑË÷ÔÚһЩ±íÖв»´æÔڵļǼ£¬²¢ÇÒ Where ²¿·ÖÖÐÓмì²âÌõ¼þ£ºcol_name IS NULL£¬col_name ×ֶζ¨Òå³É NOT NULL µÄ»°£¬MySQL¾Í»áÔÚÕÒµ½Ò»ÌõÆ¥Åä LEFT JOIN Ìõ¼þµÄ¼Ç¼£¨ÓÃÓÚºÍÌØ¶¨µÄË÷Òý¼ü×öÁªºÏ£©ºóÍ£Ö¹ËÑË÷ÁË¡£


RIGHT JOIN µÄʵÏÖºÍ LEFT JOIN ÀàËÆ£¬²»¹ý±íµÄ½ÇÉ«µ¹¹ýÀ´ÁË¡£
Á¬½ÓÓÅ»¯³ÌÐò¼ÆËãÁ˱íÁ¬½ÓµÄ´ÎÐò¡£±í¶ÁÈ¡µÄ˳ÐòÊÇÓÉ LEFT JOIN Ç¿ÐÐÖ¸¶¨µÄ£¬¶øÇÒʹÓà STRAIGHT_JOIN ÄܰïÖúÁ¬½ÓÓÅ»¯³ÌÐò¸ü¿ìµØÖ´ÐУ¬ÒòΪÕâ¾Í»áÓиüÉٵıíÅŶӼì²éÁË¡£×¢Ò⣬ÕâÀïÊÇÖ¸Èç¹ûÄãÖ´ÐÐÏÂÃæÕâÖÖÀàÐ͵IJéѯºó£¬MySQL¾Í»á¶Ô b ×öÒ»´ÎÈ«±íɨÃ裬ÒòΪ LEFT JOIN Ç¿ÖÆÒªÇóÁ˱ØÐëÔÚ¶Á d ֮ǰÕâô×ö£º



Select *FROM a,b LEFT JOIN c ON (c.key=a.key) LEFT JOIN d ON (d.key=a.key)Where b.key=d.key;

½â¾öÕâÖÖÇé¿öµÄ·½·¨Êǰ´ÕÕÈçÏ·½Ê½ÖØÐ´²éѯ£º

Select *FROM b,a LEFT JOIN c ON (c.key=a.key) LEFT JOIN d ON (d.key=a.key)Where b.key=d.key;

´Ó4.0.14¿ªÊ¼£¬MySQL×öÈçÏ LEFT JOIN ÓÅ»¯£ºÈç¹û¶Ô²úÉúµÄ NULL ¼Ç¼ Where Ìõ¼þ×ÜÊÇ ¼Ù£¬ÄÇô LEFT JOIN ¾Í»á±ä³ÉÒ»¸öÆÕͨµÄÁ¬½Ó¡£
ÀýÈ磬ÏÂÃæµÄ²éѯÖÐÈç¹û t2.column1 µÄÖµÊÇ NULL µÄ»°£¬Where ×Ó¾äµÄ½á¹û¾ÍÊǼÙÁË£º

Select * FROM t1 LEFT JOIN t2 ON (column1) Where t2.column2=5;

Òò´Ë£¬Õâ¾Í¿ÉÒÔ°²È«µÄת»»³ÉÒ»¸öÆÕͨµÄÁ¬½Ó²éѯ£º

Select * FROM t1,t2 Where t2.column2=5 AND t1.column1=t2.column1;

Õâ²éѯÆðÀ´¾Í¸ü¿ìÁË£¬ÒòΪÈç¹ûÄÜÓÐÒ»¸ö¸üºÃµÄ²éѯ¼Æ»®µÄ»°£¬MySQL¾Í»áÔÚ t1 ֮ǰ¾ÍÓõ½ t2 ÁË¡£ÏëҪǿÐÐÖ¸¶¨±í˳ÐòµÄ»°£¬¿ÉÒÔʹÓà STRAIGHT_JOIN¡£

ÒúÉú ·¢±íÓÚ 2007-11-16 13:27

7.2.9 MySQL ÈçºÎÓÅ»¯ ORDER BY



ÔÚһЩÇé¿öÏ£¬MySQL¿ÉÒÔÖ±½ÓʹÓÃË÷ÒýÀ´Âú×ãÒ»¸ö ORDER BY »ò GROUP BY ×Ӿ䶸ÎÞÐè×ö¶îÍâµÄÅÅÐò¡£

¾¡¹Ü ORDER BY ²»ÊǺÍË÷ÒýµÄ˳Ðò׼ȷƥÅ䣬Ë÷Òý»¹ÊÇ¿ÉÒÔ±»Óõ½£¬Ö»Òª²»ÓõÄË÷Òý²¿·ÖºÍËùÓеĶîÍâµÄ ORDER BY ×Ö¶ÎÔÚ Where ×Ó¾äÖж¼±»°üÀ¨ÁË¡£ÏÂÁеö²éѯ¶¼»áʹÓÃË÷ÒýÀ´½â¾ö ORDER BY »ò GROUP BY ²¿·Ö£º

Select * FROM t1 orDER BY key_part1,key_part2,... ;Select * FROM t1 Where key_part1=constant orDER BY key_part2;Select * FROM t1 Where key_part1=constant GROUP BY key_part2;Select * FROM t1 orDER BY key_part1 DESC, key_part2 DESC;Select * FROM t1Where key_part1=1 orDER BY key_part1 DESC, key_part2 DESC;

ÔÚÁíһЩÇé¿öÏ£¬MySQLÎÞ·¨Ê¹ÓÃË÷ÒýÀ´Âú×ã ORDER BY£¬¾¡¹ÜËü»áʹÓÃË÷ÒýÀ´ÕÒµ½¼Ç¼À´Æ¥Åä Where ×Ӿ䡣ÕâЩÇé¿öÈçÏ£º


    * ¶Ô²»Í¬µÄË÷Òý¼ü×ö ORDER BY £º

      

      Select * FROM t1 orDER BY key1, key2;

      
    * ÔÚ·ÇÁ¬ÐøµÄË÷Òý¼ü²¿·ÖÉÏ×ö ORDER BY£º

      

      Select * FROM t1 Where key2=constant orDER BY key_part2;

      
    * ͬʱʹÓÃÁË ASC ºÍ DESC£º

      

      Select * FROM t1 orDER BY key_part1 DESC, key_part2 ASC;

      
    * ÓÃÓÚËÑË÷¼Ç¼µÄË÷Òý¼üºÍ×ö ORDER BY µÄ²»ÊÇͬһ¸ö£º

      

      Select * FROM t1 Where key2=constant orDER BY key1;

      
    * Óкܶà±íÒ»Æð×öÁ¬½Ó£¬¶øÇÒ¶ÁÈ¡µÄ¼Ç¼ÖÐÔÚ ORDER BY ÖеÄ×ֶζ¼²»È«ÊÇÀ´×ÔµÚÒ»¸ö·Ç³£ÊýµÄ±íÖУ¨Ò²¾ÍÊÇ˵£¬ÔÚ EXPLAIN ·ÖÎöµÄ½á¹ûÖеĵÚÒ»¸ö±íµÄÁ¬½ÓÀàÐͲ»ÊÇ const£©¡£

      

      
    * ʹÓÃÁ˲»Í¬µÄ ORDER BY ºÍ GROUP BY ±í´ïʽ¡£

      

      
    * ±íË÷ÒýÖеļǼ²»Êǰ´Ðò´æ´¢¡£ÀýÈ磬HASH ºÍ HEAP ±í¾ÍÊÇÕâÑù¡£



ͨ¹ýÖ´ÐÐ EXPLAIN Select ... orDER BY£¬¾ÍÖªµÀMySQLÊÇ·ñÔÚ²éѯÖÐʹÓÃÁËË÷Òý¡£Èç¹û Extra ×ֶεÄÖµÊÇ Using filesort£¬Ôò˵Ã÷MySQLÎÞ·¨Ê¹ÓÃË÷Òý¡£ÏêÇéÇë¿´"7.2.1 EXPLAIN Syntax (Get Information About a Select)"¡£

µ±±ØÐë¶Ô½á¹û½øÐÐÅÅÐòʱ£¬MySQL 4.1 ÒÔǰËüʹÓÃÁËÒÔÏ filesort Ëã·¨£º


   1. ¸ù¾ÝË÷Òý¼ü¶ÁÈ¡¼Ç¼£¬»òÕßɨÃèÊý¾Ý±í¡£ÄÇЩÎÞ·¨Æ¥Åä Where ·Ö¾äµÄ¼Ç¼¶¼»á±»ÂÔ¹ý¡£

      

      
   2. ÔÚ»º³åÖÐÿÌõ¼Ç¼¶¼ÓÃÒ»¸ö¡®¶Ô¡¯´æ´¢ÁË2¸öÖµ£¨Ë÷Òý¼ü¼°¼Ç¼ָÕ룩¡£»º³åµÄ´óСÒÀ¾Ýϵͳ±äÁ¿ sort_buffer_size µÄÖµ¶ø¶¨¡£

      

      
   3. µ±»º³åÂýÁËʱ£¬¾ÍÔËÐÐ qsort£¨¿ìËÙÅÅÐò£©²¢½«½á¹û´æ´¢ÔÚÁÙʱÎļþÖС£½«´æ´¢µÄ¿éÖ¸Õë±£´æÆðÀ´£¨Èç¹ûËùÓеġ®¶Ô¡¯Öµ¶¼Äܱ£´æÔÚ»º³åÖУ¬¾ÍÎÞÐè´´½¨ÁÙʱÎļþÁË£©¡£

      

      
   4. Ö´ÐÐÉÏÃæµÄ²Ù×÷£¬Ö±µ½ËùÓеļǼ¶¼¶ÁÈ¡³öÀ´ÁË¡£

      

      
   5. ×öÒ»´Î¶àÖØºÏ²¢£¬½«¶à´ï MERGEBUFF£¨7£©¸öÇøÓòµÄ¿é±£´æÔÚÁíÒ»¸öÁÙʱÎļþÖС£Öظ´Õâ¸ö²Ù×÷£¬Ö±µ½ËùÓÐÔÚµÚÒ»¸öÎļþµÄ¿é¶¼·Åµ½µÚ¶þ¸öÎļþÁË¡£

      

      
   6. ÖØ¸´ÒÔÉϲÙ×÷£¬Ö±µ½Ê£ÓàµÄ¿éÊýÁ¿Ð¡ÓÚ MERGEBUFF2 (15)¡£

      

      
   7. ÔÚ×îºóÒ»´Î¶àÖØºÏ²¢Ê±£¬Ö»ÓмǼµÄÖ¸Õ루ÅÅÐòË÷Òý¼üµÄ×îºó²¿·Ö£©Ð´µ½½á¹ûÎļþÖÐÈ¥¡£

      

      
   8. ͨ¹ý¶ÁÈ¡½á¹ûÎļþÖеļǼָÕëÀ´°´Ðò¶ÁÈ¡¼Ç¼¡£ÏëÒªÓÅ»¯Õâ¸ö²Ù×÷£¬MySQL½«¼Ç¼ָÕë¶ÁÈ¡·Åµ½Ò»¸ö´óµÄ¿éÀ²¢ÇÒʹÓÃËüÀ´°´Ðò¶ÁÈ¡¼Ç¼£¬½«¼Ç¼·Åµ½»º³åÖС£»º³åµÄ´óСÓÉϵͳ±äÁ¿ read_rnd_buffer_size µÄÖµ¶ø¶¨¡£Õâ¸ö²½ÖèµÄ´úÂëÔÚÔ´Îļþ `sql/records.cc' ÖС£



Õâ¸ö±Æ½üËã·¨µÄÒ»¸öÎÊÌâÊÇ£¬Êý¾Ý¿â¶ÁÈ¡ÁË2´Î¼Ç¼£ºÒ»´ÎÊǹÀËã Where ·Ö¾äʱ£¬µÚ¶þ´ÎÊÇÅÅÐòʱ¡£¾¡¹ÜµÚÒ»´Î¶¼³É¹¦¶ÁÈ¡¼Ç¼ÁË£¨ÀýÈ磬×öÁËÒ»´ÎÈ«±íɨÃ裩£¬µÚ¶þ´ÎÊÇËæ»úµÄ¶ÁÈ¡£¨Ë÷Òý¼üÒѾ­ÅźÃÐòÁË£¬µ«ÊǼǼ²¢Ã»ÓУ©¡£

ÔÚMySQL 4.1 ¼°¸üа汾ÖУ¬filesort ÓÅ»¯Ëã·¨ÓÃÓڼǼÖв»Ö»°üÀ¨Ë÷Òý¼üÖµºÍ¼Ç¼µÄλÖ㬻¹°üÀ¨²éѯÖÐÒªÇóµÄ×ֶΡ£Õâô×ö±ÜÃâÁËÐèÒª2´Î¶ÁÈ¡¼Ç¼¡£¸Ä½øµÄ filesort Ëã·¨×ö·¨´óÖÂÈçÏ£º

      

      
   1. ¸úÒÔǰһÑù£¬¶ÁȡƥÅä Where ·Ö¾äµÄ¼Ç¼¡£

      

      
   2. Ïà¶ÔÓÚÿ¸ö¼Ç¼£¬¶¼¼Ç¼ÁËÒ»¸ö¶ÔÓ¦µÄ£»¡®Ôª×顯ÐÅÏ¢ÐÅÏ¢£¬°üÀ¨Ë÷Òý¼üÖµ¡¢¼Ç¼λÖá¢ÒÔ¼°²éѯÖÐËùÐèÒªµÄËùÓÐ×ֶΡ£

      

      
   3. ¸ù¾ÝË÷Òý¼ü¶Ô¡®Ôª×顯ÐÅÏ¢½øÐÐÅÅÐò¡£

      

      
   4. °´Ðò¶ÁÈ¡¼Ç¼£¬²»¹ýÊÇ´ÓÒѾ­ÅÅÐò¹ýµÄ¡®Ôª×顯ÁбíÖжÁÈ¡¼Ç¼£¬¶ø·Ç´ÓÊý¾Ý±íÖÐÔÙ¶Áȡһ´Î¡£



ʹÓøĽøºóµÄ filesort Ëã·¨Ïà±ÈÔ­À´µÄ£¬¡®Ôª×顯±È¡®¶Ô¡¯ÐèÒªÕ¼Óøü³¤µÄ¿Õ¼ä£¬ËüÃǺÜÉÙÕýºÃÊʺϷÅÔÚÅÅÐò»º³åÖУ¨»º³åµÄ´óСÊÇÓÉ sort_buffer_size µÄÖµ¾ö¶¨µÄ£©¡£Òò´Ë£¬Õâ¾Í¿ÉÄÜÐèÒªÓиü¶àµÄI/O²Ù×÷£¬µ¼Ö¸ĽøµÄËã·¨¸üÂý¡£ÎªÁ˱ÜÃâʹ֮±äÂý£¬ÕâÖÖÓÅ»¯·½·¨Ö»ÓÃÓÚÅÅÐò¡®Ôª×顯ÖжîÍâµÄ×ֶεĴóС×ܺͳ¬¹ýϵͳ±äÁ¿ max_length_for_sort_data µÄÇé¿ö£¨Õâ¸ö±äÁ¿µÄÖµÉèÖÃÌ«¸ßµÄÒ»¸ö±íÏó¾ÍÊǸߴÅÅ̸ºÔصÍCPU¸ºÔØ£©¡£

ÏëÒªÌá¸ß ORDER BY µÄËÙ¶È£¬Ê×ÏÈÒª¿´MySQLÄÜ·ñʹÓÃË÷Òý¶ø·Ç¶îÍâµÄÅÅÐò¹ý³Ì¡£Èç¹û²»ÄÜʹÓÃË÷Òý£¬¿ÉÒÔÊÔ×Å×ñÑ­ÒÔϲßÂÔ£º


    * Ôö¼Ó sort_buffer_size µÄÖµ¡£

      

      
    * Ôö¼Ó read_rnd_buffer_size µÄÖµ¡£

      

      
    * ÐÞ¸Ä tmpdir£¬ÈÃËüÖ¸ÏòÒ»¸öÓкܶàÊ£Óà¿Õ¼äµÄרÓÃÎļþϵͳ¡£Èç¹ûʹÓÃMySQL 4.1»ò¸üУ¬Õâ¸öÑ¡ÏîÔÊÐíÓжà¸ö·¾¶ÓÃÑ­»·µÄ¸ñʽ¡£¸÷¸ö·¾¶Ö®¼äÔÚ Unix ÉÏÓÃðºÅ£¨':'£©·Ö¸ô¿ªÀ´£¬ÔÚ Windows£¬NetWareÒÔ¼°OS/2 ÉÏÓ÷ֺţ¨';'£©¡£¿ÉÒÔÀûÓÃÕâ¸öÌØÐÔ½«¸ºÔØÆ½¾ù·Ö̯¸ø¼¸¸öĿ¼¡£×¢Ò⣺ÕâЩ·¾¶±ØÐëÊÇ·Ö²¼ÔÚ²»Í¬ÎïÀí´ÅÅÌÉϵÄĿ¼£¬¶ø·ÇÔÚͬһ¸öÎïÀí´ÅÅÌÉϵIJ»Í¬Ä¿Â¼¡£


ĬÈÏÇé¿öÏ£¬MySQLÒ²»á¶ÔËùÓÐµÄ GROUP BY col1, col2, ... ²éѯ×öÅÅÐò£¬¸ú ORDER BY col1, col2, ... ²éѯһÑù¡£Èç¹ûÏÔʽµØ°üº¬Ò»¸öÓÐͬÑù×Ö¶ÎÁбíµÄ ORDER BY ·Ö¾ä£¬MySQLÓÅ»¯ËüµÄʱºò²¢²»»áËðʧËÙ¶È£¬ÒòΪÅÅÐò×ÜÊǻᷢÉú¡£Èç¹ûÒ»¸ö²éѯÖаüÀ¨ GROUP BY£¬µ«ÊÇÏëÒª±ÜÃâ¶Ô½á¹ûÅÅÐòµÄ¿ªÏú£¬¿ÉÒÔͨ¹ýʹÓà ORDER BY NULL À´È¡ÏûÅÅÐò¡£ÀýÈ磺



Insert INTO fooSelect a, COUNT(*) FROM bar GROUP BY a orDER BY NULL;


7.2.10 MySQL ÈçºÎÓÅ»¯ LIMIT

ÔÚһЩÇé¿öÏ£¬MySQLÔÚÅöµ½Ò»¸öʹÓà LIMIT row_count µ«Ã»Ê¹Óà HAVING
µÄ²éѯʱ»á×ö²»Í¬µÄ´¦Àí£º

      

      
    * Èç¹ûÖ»ÊÇÓà LIMIT À´È¡µÃºÜÉÙµÄһЩ¼Ç¼£¬ MySQL ÓÐʱ»áʹÓÃË÷Òý£¬µ«ÊǸüͨ³£µÄÇé¿öÊÇ×öÒ»¸öÈ«±íɨÃè¡£

      

      
    * Èç¹û LIMIT row_count ºÍ ORDER BY Ò»ÆðʹÓã¬ÔòMySQLÔÚÕÒµ½ row_count Ìõ¼Ç¼ºó¾Í»áÍ£Ö¹ÅÅÐòÁË£¬¶ø·Ç¶ÔÕû¸ö±í½øÐÐÅÅÐò¡£

      

      
    * µ± LIMIT row_count ºÍ DISTINCT Ò»ÆðÁªºÏÆðÀ´Ê±£¬MySQLÔÚÕÒµ½ row_count ÌõΨһ¼Ç¼ºó¾Í²»ÔÙËÑË÷ÁË¡£

      

      
    * ÔÚijЩÇé¿öÏ£¬ GROUP BY ¿ÉÒÔͨ¹ý°´ÕÕ˳Ðò¶ÁÈ¡Ë÷Òý¼üÀ´ÊµÏÖ£¨»òÕßÔÚË÷Òý¼üÉÏ×öÅÅÐò£©²¢ÇÒ¼ÆËãÀÛ¼ÆÐÅÏ¢Ö±µ½Ë÷Òý¼ü¸Ä±äÁË¡£ÔÚÕâÖÖÇé¿öÏ£¬LIMIT row_count ²»»á¼ÆËãÈκηDZØÐëµÄ GROUP BY Öµ¡£

      

      
    * Ò»µ©MySQL½«ÇëÇóµÄ¼Ç¼ȫÊý·¢Ë͸ø¿Í»§¶Ëºó£¬Ëü¾ÍÖÐÖ¹²éѯ³ý·ÇʹÓÃÁË SQL_CALC_FOUND_ROWS¡£

      

      
    * LIMIT 0 ×ÜÊÇ·µ»ØÒ»¸ö¿ÕµÄ½á¹û¼¯¡£Õâ¶ÔÓÚ¼ì²é²éѯ»òÕßÈ¡µÃ½á¹û×ֶεÄÀàÐͷdz£ÓÐÓá£

      

      
    * µ±·þÎñÆ÷ʹÓÃÁÙʱ±íÀ´´¦Àí²éѯ£¬Ôò LIMIT row_count ¿ÉÒÔÓÃÀ´¼ÆËãÐèÒª¶àÉٿռ䡣


7.2.11 ÈçºÎ±ÜÃâÈ«±íɨÃè

Èç¹ûMySQLÐèÒª×öÒ»´ÎÈ«±íɨÃèÀ´´¦Àí²éѯʱ£¬ÔÚ EXPLAIN µÄ½á¹ûÖÐ type ×ֶεÄÖµÊÇ ALL¡£ÔÚÒÔϼ¸ÖÖÌõ¼þÏ£¬MySQL¾Í»á×öÈ«±íɨÃ裺

    * Êý¾Ý±íÊÇÔÚ̫СÁË£¬×öÒ»´ÎÈ«±íɨÃè±È×öË÷Òý¼üµÄ²éÕÒÀ´µÃ¿ì¶àÁË¡£µ±±íµÄ¼Ç¼×ÜÊýСÓÚ10ÇҼǼ³¤¶È±È½Ï¶Ìʱͨ³£Õâô×ö¡£

      

      
    * ûÓкÏÊÊÓÃÓÚ ON »ò Where ·Ö¾äµÄË÷Òý×ֶΡ£

      

      
    * ÈÃË÷Òý×ֶκͳ£Á¿Öµ±È½Ï£¬MySQLÒѾ­¼ÆË㣨»ùÓÚË÷ÒýÊ÷£©µ½³£Á¿¸²¸ÇÁËÊý¾Ý±íµÄºÜ´ó²¿·Ö£¬Òò´Ë×öÈ«±íɨÃèÓ¦¸Ã»áÀ´µÃ¸ü¿ì¡£ÏêÇéÇë¿´"7.2.4 How MySQL Optimizes Where Clauses"¡£

      

      
    * ͨ¹ýÆäËû×Ö¶ÎʹÓÃÁËÒ»¸ö»ùÊýºÜС£¨ºÜ¶à¼Ç¼ƥÅäË÷Òý¼üÖµ£©µÄË÷Òý¼ü¡£ÕâÖÖÇé¿öÏ£¬MySQLÈÏΪʹÓÃË÷Òý¼üÐèÒª´óÁ¿²éÕÒ£¬»¹²»ÈçÈ«±íɨÃèÀ´µÃ¸ü¿ì¡£


¶ÔÓÚС±íÀ´Ëµ£¬È«±íɨÃèͨ³£¸üºÏÊÊ¡£µ«ÊǶԴó±íÀ´Ëµ£¬³¢ÊÔʹÓÃÒÔϼ¼ÊõÀ´±ÜÃâÈÃÓÅ»¯³ÌÐò´íÎóµØÑ¡ÔñÈ«±íɨÃ裺

    * Ö´ÐÐ ANALYZE TABLE tbl_name ¸üÐÂҪɨÃèµÄ±íµÄË÷Òý¼ü·Ö²¼¡£ÏêÇéÇë¿´"14.5.2.1 ANALYZE TABLE Syntax"¡£

      

      
    * ʹÓà FORCE INDEX ¸æËßMySQL£¬×öÈ«±íɨÃèµÄ»°»á±ÈÀûÓøø¶¨µÄË÷Òý¸üÀË·Ñ×ÊÔ´¡£ÏêÇéÇë¿´"14.1.7 Select Syntax"¡£

      

      Select * FROM t1, t2 FORCE INDEX (index_for_column)    Where t1.col_name=t2.col_name;   

      
    * Æô¶¯ mysqld ʱʹÓòÎÊý --max-seeks-for-key=1000 »òÕßÖ´ÐÐ SET max_seeks_for_key=1000 À´¸æËßÓÅ»¯³ÌÐò£¬ËùÓеÄË÷Òý¶¼²»»áµ¼Ö³¬¹ý1000´ÎµÄË÷ÒýËÑË÷¡£Çë²é¿´Õ½Ú"5.2.3 Server System Variables"¡£


7.2.12 ¼ÓËÙ Insert

²åÈëÒ»Ìõ¼Ç¼»¨·ÑµÄʱ¼äÓÉÒÔϼ¸¸öÒòËØ¾ö¶¨£¬ºóÃæµÄÊý×Ö´óÖ±íʾӰÏìµÄ±ÈÀý£º

      

      
    * Á¬½Ó£º£¨3£©

      

      
    * ·¢ËͲéѯ¸ø·þÎñÆ÷£º£¨2£©

      

      
    * ½âÎö²éѯ£º£¨2£©

      

      
    * ²åÈë¼Ç¼£º£¨1 x ¼Ç¼´óС£©

      

      
    * ²åÈëË÷Òý£º£¨1 x Ë÷ÒýÊýÁ¿£©

      

      
    * ¹Ø±Õ£º£¨1£©



ÕâÀﲢûÓп¼Âdzõʼ»¯Ê±´ò¿ªÊý¾Ý±íµÄ¿ªÏú£¬ÒòΪÿ´ÎÔËÐвéѯֻ»á×öÕâôһ´Î¡£

Èç¹ûÊÇ B-tree Ë÷ÒýµÄ»°£¬Ëæ×ÅË÷ÒýÊýÁ¿µÄÔö¼Ó£¬²åÈë¼Ç¼µÄËÙ¶ÈÒÔ log N µÄ±ÈÀýϽµ¡£

¿ÉÒÔʹÓÃÒÔϼ¸ÖÖ·½·¨À´Ìá¸ß²åÈëËÙ¶È£º

    * Èç¹ûÒªÔÚͬһ¸ö¿Í»§¶ËÔÚͬһʱ¼äÄÚ²åÈëºÜ¶à¼Ç¼£¬¿ÉÒÔʹÓà Insert Óï¾ä¸½´øÓжà¸ö VALUES Öµ¡£ÕâÖÖ×ö·¨±ÈʹÓõ¥Ò»ÖµµÄ Insert Óï¾ä¿ì¶àÁË£¨ÔÚһЩÇé¿öϱȽϿ죩¡£Èç¹ûÊÇÍùÒ»¸ö·Ç¿ÕµÄÊý¾Ý±íÀïÔö¼Ó¼Ç¼£¬¿ÉÒÔµ÷Õû±äÁ¿ bulk_insert_buffer_size µÄֵʹ֮¸ü¿ì¡£ÏêÇéÇë¿´"5.2.3 Server System Variables"¡£

      

      
    * Èç¹ûÒª´Ó²»Í¬µÄ¿Í»§¶ËÖвåÈë´óÁ¿¼Ç¼£¬Ê¹Óà Insert DELAYED Óï¾äÒ²¿ÉÒÔÌá¸ßËÙ¶È¡£ÏêÇéÇë¿´"14.1.4 Insert Syntax"¡£

      

      
    * ¶Ô MyISAM ¶øÑÔ£¬¿ÉÒÔÔÚ Select Óï¾äÕýÔÚÔËÐÐʱ²åÈë¼Ç¼£¬Ö»ÒªÕâʱºòûÓÐÕýÔÚɾ³ý¼Ç¼¡£

      

      
    * ÏëÒª½«Ò»¸öÎı¾Îļþ¼ÓÔØµ½Êý¾Ý±íÖУ¬¿ÉÒÔʹÓà LOAD DATA INFILE¡£Õâͨ³£ÊÇʹÓôóÁ¿ Insert Óï¾äµÄ20±¶¡£ÏêÇéÇë¿´"14.1.5 LOAD DATA INFILE Syntax"¡£

      

      
    * ͨ¹ýһЩ¶îÍâµÄ¹¤×÷£¬¾Í¿ÉÄÜÈà LOAD DATA INFILE ÔÚÊý¾Ý±íÓдóÁ¿Ë÷ÒýµÄÇé¿öÏÂÔËÐеĸü¿ì¡£²½ÖèÈçÏ£º
         1. Óà Create TABLE Ëæ±ã´´½¨Ò»¸ö±í¡£

            

            
         2. Ö´ÐÐ FLUSH TABLES Óï¾ä»ò mysqladmin flush-tables ÃüÁî¡£

            

            
         3. Ö´ÐÐ myisamchk --keys-used=0 -rq /path/to/db/tbl_name ÃüÁɾµôÊý¾Ý±íµÄËùÓÐË÷Òý¡£

            

            
         4. Ö´ÐÐ LOAD DATA INFILE£¬Êý¾Ý²åÈëµ½±íÖУ¬ÓÉÓÚÎÞÐè¸üбíË÷Òý£¬Òò´ËÕ⽫·Ç³£¿ì¡£

            

            
         5. Èç¹û½«À´Ö»ÊǶÁÈ¡¸Ä±í£¬ÔËÐÐ myisampack ÈÃÊý¾Ý±í±äµÃ¸üСµã¡£ÏêÇé²é¿´"15.1.3.3 Compressed Table Characteristics"¡£

            

            
         6. ÔËÐÐ myisamchk -r -q /path/to/db/tbl_name ÖØ½¨Ë÷Òý¡£´´½¨µÄË÷ÒýÊ÷ÔÚдÈë´ÅÅÌǰÏȱ£´æÔÚÄÚ´æÖУ¬ÕâʡȥÁË´ÅÅÌËÑË÷£¬Òò´ËËÙ¶È¿ì¶àÁË¡£Öؽ¨ºóµÄË÷ÒýÊ÷·Ö²¼·Ç³£¾ùºâ¡£
         7. Ö´ÐÐ FLUSH TABLES Óï¾ä»ò mysqladmin flush-tables ÃüÁî¡£

      ×¢Ò⣬LOAD DATA INFILE ½«Êý¾Ý²åÈëÒ»¸ö¿Õ±íʱ£¬Ò²»á×öǰ½ÓÓÅ»¯£»Ö÷ÒªµÄ²»Í¬ÔÚÓÚ£ºÔËÐÐ myisamchk »á·ÖÅä¸ü¶àµÄÁÙʱÄÚ´æÓÃÓÚ´´½¨Ë÷Òý£¬¶øÖ´ÐÐ LOAD DATA INFILE ÃüÁîÔòÊÇÈÃÊý¾Ý¿â·þÎñÆ÷·ÖÅäÄÚ´æÓÃÓÚÖØ½¨Ë÷Òý¡£´Ó MySQL 4.0 Æð£¬¿ÉÒÔÔËÐÐ Alter TABLE tbl_name DISABLE KEYS À´´úÌæ myisamchk --keys-used=0 -rq /path/to/db/tbl_name£¬ÔËÐÐ Alter TABLE tbl_name ENABLE KEYS ´úÌæ myisamchk -r -q /path/to/db/tbl_name¡£Õâô×ö¾Í¿ÉÒÔʡȥ FLUSH TABLES ²½Öè¡£

      

      
    * ¿ÉÒÔÔÚËø±íºó£¬Ò»ÆðÖ´Ðм¸¸öÓï¾äÀ´¼ÓËÙ Insert ²Ù×÷£º

      

      LOCK TABLES a WRITE;    Insert INTO a VALUES (1,23),(2,34),(4,33);    Insert INTO a VALUES (8,26),(6,29);    UNLOCK TABLES;   

      Õâ¶ÔÐÔÄÜÌá¸ßµÄºÃ´¦ÔÚÓÚ£ºÖ±µ½ËùÓÐµÄ Insert Óï¾ä¶¼Íê³ÉÖ®ºó£¬Ë÷Òý»º´æÒ»´ÎÐÔˢе½´ÅÅÌÖС£Í¨³£Çé¿öÊÇ£¬¶àÓÐÉÙ´Î Insert Óï¾ä¾Í»áÓжàÊý´ÎË÷Òý»º´æË¢Ðµ½´ÅÅÌÖеĿªÏú¡£Èç¹ûÄÜÔÚÒ»¸öÓï¾äÖÐÒ»´ÎÐÔ²åÈë¶à¸öÖµµÄ»°£¬ÏÔʾµÄËø±í²Ù×÷Ò²¾Íû±ØÒªÁË¡£¶ÔÊÂÎñ±í¶øÑÔ£¬Óà BEGIN/COMMIT ´úÌæ LOCK TABLES À´Ìá¸ßËÙ¶È¡£Ëø±íÒ²»Ø½µµÍ¶à´ÎÁ¬½Ó²âÊÔµÄ×Üʱ¼ä£¬¾¡¹Üÿ¸ö¶ÀÁ¢Á¬½ÓΪÁ˵ȴýËøµÄ×î´óµÈ´ýʱ¼äÒ²»áÔö¼Ó¡£ÀýÈ磺

      Connection 1 does 1000 inserts    Connections 2, 3, and 4 do 1 insert    Connection 5 does 1000 inserts   

      Èç¹ûûÓÐËø±í£¬ÔòÁ¬½Ó2£¬3£¬4»áÔÚ1£¬5֮ǰ¾Í×öÍêÁË¡£Èç¹ûËø±íÁË£¬ÔòÁ¬½Ó2£¬3£¬4¿ÉÄÜÔÚ1£¬5Ö®ºó²ÅÄÜÍê³É£¬µ«ÊÇ×Üʱ¼ä¿ÉÄÜÖ»ÐèÒª40%¡£MySQLµÄ Insert, Update, Delete ²Ù×÷¶¼·Ç³£¿ì£¬²»¹ýÔÚÒ»¸öÓï¾äÖÐÈç¹ûÓг¬¹ý5¸ö²åÈë»òÕ߸üÐÂʱ×îºÃ¼ÓËøÒԵõ½¸üºÃµÄÐÔÄÜ¡£Èç¹ûÒªÒ»´ÎÐÔ×öºÜ¶à¸ö²åÈ룬×îºÃÊÇÔÚÿ¸öÑ­»·£¨´óÔ¼1000´Î£©µÄǰºó¼ÓÉÏ LOCK TABLES ºÍ UNLOCK TABLES£¬´Ó¶øÈÃÆäËû½ø³ÌÒ²ÄÜ·ÃÎÊÊý¾Ý±í;Õâô×öÐÔÄÜÒÀÈ»²»´í¡£Insert ×ÜÊÇ±È LOAD DATA INFILE ²åÈëÊý¾ÝÀ´µÃÂý£¬ÒòΪ¶þÕßµÄʵÏÖ²ßÂÔÓÐ×Å·ÖÃ÷µÄ²»Í¬¡£
    * ÏëÒªÈà MyISAM ±í¸ü¿ì£¬ÔÚ LOAD DATA
      INFILE ºÍ Insert ʱ¶¼¿ÉÒÔÔö¼Óϵͳ±äÁ¿ key_buffer_size µÄÖµ£¬ÏêÇéÇë¿´"7.5.2 Tuning Server Parameters"¡£


7.2.13 ¼ÓËÙ Update



Update Óï¾äµÄÓÅ»¯ºÍ Select Ò»Ñù£¬Ö»²»¹ýËü¶àÁ˶îÍâµÄдÈ뿪Ïú¡£Ð´ÈëµÄ¿ªÏúÈ¡¾öÓÚÒª¸üеļǼÊýÒÔ¼°Ë÷ÒýÊý¡£Èç¹ûË÷ÒýûÓз¢Éú±ä»¯£¬Ôò¾ÍÎÞÐè¸üС£

ÁíÒ»¸öÌá¸ß¸üÐÂËٶȵİ취ÊÇÍÆ³Ù¸üв¢ÇҰѺܶà´Î¸üзÅÔÚºóÃæÒ»Æð×ö¡£Èç¹ûËø±íÁË£¬ÄÇôͬʱ×öºÜ¶à´Î¸üбȷֱð×ö¸üÐÂÀ´µÃ¿ì¶àÁË¡£

×¢Ò⣬Èç¹ûÊÇÔÚ MyISAM ±íÖÐʹÓÃÁ˶¯Ì¬µÄ¼Ç¼¸ñʽ£¬ÄÇô¼Ç¼±»¸üÐÂΪ¸ü³¤Ö®ºó¾Í¿ÉÄܻᱻ²ð·Ö¡£Èç¹û¾­³£×öÕâ¸ö£¬ÄÇôż¶û×öÒ»´Î OPTIMIZE TABLE ¾ÍÏԵ÷dz£ÖØÒªÁË¡£ÏêÇéÇë¿´"14.5.2.5 OPTIMIZE TABLE Syntax"¡£


7.2.14 ¼ÓËÙ Delete



ɾ³ýµ¥¸ö¼Ç¼µÄʱ¼äºÍËüµÄË÷Òý¸öÊý¼¸ºõ³ÉÕý±È¡£Ïë¸ü¿ìµØÉ¾³ý¼Ç¼£¬¿ÉÒÔÔö¼ÓË÷Òý¼üµÄ»º´æ¡£ÏêÇéÇë¿´"7.5.2 Tuning Server Parameters"¡£

Èç¹ûÏëҪɾ³ýÊý¾Ý±íµÄËùÓмǼ£¬ÇëʹÓà TRUNCATE TABLE tbl_name ¶ø²»ÊÇ Delete FROM tbl_name¡£ÏêÇéÇë¿´"14.1.9 TRUNCATE Syntax"¡£
7.2.15 ÆäËûÓÅ»¯µã×Ó

±¾Õ½ÚÁгöÁËһЩ¸ÄÉÆ²éѯ´¦ÀíËÙ¶ÈµÄÆäËûµã×Ó£º


    * ʹÓÃÓÀ¾ÃÁ¬½Óµ½Êý¾Ý¿â£¬±ÜÃâÁ¬½ÓµÄ¿ªÏú¡£Èç¹ûÐèÒª³õʼ»¯ºÜ¶àÁ¬½Ó£¬¶øÓÖ²»ÄÜÓÃÓÀ¾ÃÁ¬½Ó£¬ÄÇô¿ÉÒÔÐ޸ıäÁ¿ thread_cache_size µÄÖµ£¬ÏêÇéÇë¿´"7.5.2 Tuning Server Parameters"¡£

      

      
    * ×ÜÊǼì²é²éѯÊÇ·ñÀûÓÃÁ˱íÖÐÒÑÓеÄË÷Òý¡£ÔÚMySQLÖУ¬¿ÉÒÔÓà EXPLAIN Óï¾äÀ´·ÖÎö¡£ÏêÇéÇë¿´"7.2.1 EXPLAIN Syntax (Get Information About a Select)"¡£

      

      
    * ¾¡Á¿²»ÒªÔÚ¾­³£ÐèÒª¸üÐ嵀 MyISAM ±íÉÏÓÃÌ«¹ý¸´Ô Select Óï¾ä£¬ÕâÊÇΪÁ˱ÜÃâÔÚ¶ÁºÍд֮¼äÕù¶áËø¡£

      

      
    * ÔÚ MyISAM ±íÖУ¬Èç¹ûûÓÐÕýÔÚɾ³ý¼Ç¼£¬Ôò¿ÉÒÔÔÚÆäËû²éѯÕýÔÚ¶ÁÈ¡Êý¾ÝµÄͬʱ²åÈë¼Ç¼¡£Èç¹ûÕâÖÖÇé¿öÊ®·ÖÖØÒª£¬ÄÇô¾ÍÒª¾¡Á¿ÔÚ±íûÓÐɾ³ý¼Ç¼ʱ²ÅʹÓÃ±í¡£ÁíÒ»¸ö¿ÉÄܵİ취¾ÍÊÇÔÚɾ³ýÒ»´ó¶Ñ¼Ç¼֮ºóÖ´ÐÐ OPTIMIZE TABLE Óï¾ä¡£

      

      
    * Èç¹û×ÜÊÇÐèÒª°´ÕÕ expr1, expr2, ... µÄ˳ÐòÈ¡µÃ¼Ç¼£¬ÄÇôÇëʹÓà Alter TABLE ... orDER BY expr1, expr2, ... ÐÞ¸Ä±í¡£Í¨¹ýÕâÖÖ·½·¨À©³äÐ޸ıíÖ®ºó£¬¾Í¿ÉÄÜ»ñµÃ¸ü¸ßµÄÐÔÄܱíÏÖ¡£

      

      
    * ÔÚһЩÇé¿öÏ£¬ÈÃÒ»¸ö×Ö¶ÎÀàÐÍÊÇ ``hashed`` £¬Ëü»ùÓÚÆäËû×Ö¶ÎÐÅÏ¢¡£Èç¹ûÕâ¸ö×ֶαȽ϶̶øÇÒ»ù±¾É϶¼ÊÇΨһֵµÄ»°£¬ÄÇô¾Í¿ÉÄÜ»á±ÈÔÚ¼¸¸ö×Ö¶ÎÉÏʹÓÃÒ»¸ö´óË÷ÒýÀ´µÃ¸ü¿ì£¬ºÜ¼òµ¥µÄ¾ÍÄÜʹÓÃÕâÑùµÄ¶îÍâ×ֶΣ¬ÈçÏ£º

      

      Select * FROM tbl_name Where hash_col=MD5(CONCAT(col1,col2))    AND col1='constant' AND col2='constant';

      
    * Èç¹û MyISAM ±í¾­³£´óÁ¿Ð޸ģ¬ÄÇôҪ¾¡Á¿±ÜÃâÐÞ¸ÄËùÓеı䳤×ֶΣ¨VARCHAR, BLOB£¬TEXT£©¡£¾¡¹Ü±íÖÐÖ»ÓÐÒ»¸ö±ä³¤×ֶΣ¬ËüÒ²»á²ÉÓö¯Ì¬¼Ç¼¸ñʽµÄ¡£ÏêÇéÇë¿´"15 MySQL Storage Engines and Table Types"¡£

      

      
    * ͨ³£Çé¿öÏ£¬µ±Êý¾Ý±í¼Ç¼±ä ``´ó`` Ö®ºó£¬½«±í²ð·Ö³É¼¸¸ö²»Í¬µÄ±í²¢Ã»Óжà´óÓô¦¡£·ÃÎÊÒ»Ìõ¼Ç¼ÊÇ×î´óµÄÐÔÄܵãÔÚÓÚ´ÅÅÌËÑË÷ʱÕÒµ½¼Ç¼µÄµÚÒ»¸ö×Ö½ÚÉÏ¡£Ö»ÒªÕÒµ½¼Ç¼µÄλÖúó£¬ÏÖÔڵĴ󲿷ִÅÅ̶ÔÓڴ󲿷ֵÄÓ¦ÓóÌÐòÀ´Ëµ¶¼ÄܺܿìµÄ¶ÁÈ¡µ½¼Ç¼¡£½« MyISAM ±í²ð·Ö³É¶à¸öΨһÓйØÏµµÄÇé¿öÊÇ£¬Êý¾Ý±íÖж¯Ì¬¸ñʽµÄ×ֶΣ¨¼ûÉÏ£©¾Í¿ÉÒÔ±»Ð޸ijɹ̶¨´óСµÄ¼Ç¼£¬»òÕßÐèҪƵ·±µÄɨÃè±í£¬µ«ÊÇÈ´²»ÐèÒª¶ÁÈ¡³ö´ó²¿·ÖµÄ×ֶΡ£ÏêÇéÇë¿´"15 MySQL Storage Engines and Table Types"¡£

      

      
    * Èç¹ûÐèҪƵ·±µÄ¶ÔÒ»¸ö±í×ö»ùÓںܶà×Ö¶ÎÐÅÏ¢µÄͳ¼ÆÐÅÏ¢µÄ»°£¬ÄÇô¿ÉÄÜн¨Ò»¸ö±íÀ´´æ´¢ÕâЩʵʱ¸üеÄͳ¼Æ½á¹û»á¸üºÃ¡£ÀàËÆÏÂÃæµÄ¸üоͻá·Ç³£¿ìÁË£º

      

      Update tbl_name SET count_col=count_col+1 Where key_col=constant;

      Èç¹ûÖ»ÐèÒª±í¼¶Ëø£¨¶à¸ö¶Á/Ò»¸öд£©£¬ÄÇô²ÉÓà MyISAM ´æ´¢ÒýÇæ¾Í·Ç³£ÖØÒªÁË£¬ÀýÈç MyISAM ºÍ ISAM ±í¡£ÕâÔںܶàµÄÊý¾Ý¿âÖÐÒ²»áÓв»´íµÄÐÔÄܱíÏÖ£¬ÒòΪÐм¶Ëø¹ÜÀí³ÌÐòÔÚÕâÖÖÇé¿öÏÂÒ²»ù±¾ÉÏûʲôÓá£

      
    * Èç¹ûÐèÒª´ÓºÜ´óµÄÈÕÖ¾±íÖÐËѼ¯Í³¼ÆÐÅÏ¢µÄ»°£¬¿ÉÒÔÓÃÕªÒª±íÀ´´úÌæÉ¨ÃèÕû¸öÈÕÖ¾±í¡£Î¬»¤ÕªÒª±í±È±£³Ö ``ʵʱ`` µÄͳ¼ÆÐÅÏ¢À´µÃ¸ü¿ì¡£µ±ÊÂÇé·¢Éú±ä»¯Ê±£¨±ÈÈçÉÌÒµ¾ö²ß£©£¬ÖØÐ½¨ÀïÕªÒª±í±ÈÐÞ¸ÄÔËÓªÖеÄÓ¦ÓóÌÐò¿ì¶àÁË¡£

      

      
    * Èç¹û¿ÉÄÜ£¬×îºÃÊÇ·ÖÀ౨¸æ ``ʵʱ`` »¹ÊÇ ``ͳ¼Æ`` µÄ£¬±¨¸æËùÐèÒªµÄÊý¾ÝÖ»ÐèÒªÀ´×ÔÕªÒª±í£¬ÕªÒª±íµÄÐÅÏ¢ÔòÊÇÖÜÆÚµÄ´ÓʵʱÊý¾ÝÖвúÉú¡£

      

      
    * Ó¦¸ÃÈÏʶµ½Ò»¸öÓŵã¾ÍÊÇ×Ö¶ÎÓÐĬÈÏÖµ¡£µ±Òª²åÈëµÄÖµºÍĬÈÏÖµ²»Ò»ÖÂʱ²ÅÐèÒªÃ÷È·Ö¸¶¨¡£Õâ¾ÍʡȥÁËMySQLÐèÒªÀ´Ìá¸ß²åÈëËÙ¶ÈÕâ²½ÁË¡£

      

      
    * ÔÚһЩÇé¿öÏ£¬½«Êý¾Ý×é×°´æ´¢ÔÚ BLOB ÀàÐÍ×Ö¶ÎÖиü·½±ã¡£ÄÇôÔÚÓ¦ÓóÌÐòÖоÍÐèÒªÔö¼Ó¶îÍâµÄÃüÁîÀ´×é×°ºÍ²ð¿ª BLOB ×Ö¶ÎÖеÄÖµ£¬²»¹ýÕâô×öÔÚһЩʱºò¾Í¿ÉÒÔ½ÚÊ¡ºÜ¶à´æ´¢¿ªÏú¡£ÕâÔÚÊý¾ÝÎÞÐè×ñ´Ó ¼Ç¼-ºÍ-×Ö¶Î ¸ñʽµÄ±í½á¹¹ÊǺÜʵÓá£

      

      
    * ͨ³£µØ£¬Ó¦¸Ã±£´æËùÓеÄÈßÓàÊý¾Ý£¨ÔÚÊý¾Ý¿âÔ­ÀíÖнÐ×ö"µÚÈý·¶Ê½"£©¡£È»¶ø£¬ÎªÁËÄÜÈ¡µÃ¸ü¸ßµÄЧÂʸ´ÖÆÒ»Ð©ÐÅÏ¢»òÕß´´½¨ÕªÒª±íÒ²ÊÇ»®ËãµÄ¡£

      

      
    * ´æ´¢¹ý³Ì»òÕß UDFs£¨Óû§¶¨Ò庯Êý£© µÄ·½Ê½ÔÚÖ´ÐÐһЩÈÎÎñʱ¿ÉÄÜÐÔÄܸü¸ß¡£¾¡¹ÜÈç´Ë£¬µ±Êý¾Ý¿â²»Ö§³ÖÕâÐ©ÌØÐÔʱ£¬»¹ÊÇÓÐÆäËûµÄÌæ´ú·½·¨¿ÉÒԴﵽĿµÄ£¬¼´Ê¹ËüÃÇÓеãÂý¡£

      

      
    * ¿ÉÒÔ´Ó²éѯ»º´æ»òÓ¦´ðÖÐÈ¡µÃ½á¹û£¬È»ºó½«ºÜ¶à´ÎµÄ²åÈë¼°¸üвÙ×÷·ÅÔÚÒ»Æð×ö¡£Èç¹ûÊý¾Ý¿âÖ§³Ö±íËø£¨ÈçMySQLºÍORACLE£©£¬ÄÇôÕâ¾Í¿ÉÒÔÈ·±£Ë÷Òý»º´æÔÚËùÓеĸüвÙ×÷Ö®ºóÖ»ÐèҪˢÐÂÒ»´Î¡£

      

      
    * µ±²»ÐèÒªÖ±µ½Êý¾ÝʲôʱºòдÈë±íÖÐʱ£¬¿ÉÒÔÓà Insert DELAYED¡£Õâ¾Í»áÌá¸ßËÙ¶È£¬ÒòΪ¶àÌõ¼Ç¼ͬʱÔÚÒ»Æð×öÒ»´Î´ÅÅÌдÈë²Ù×÷¡£

      
    * µ±ÏëÈà Select Óï¾äµÄÓÅÏȼ¶±È²åÈë²Ù×÷»¹¸ßʱ£¬Óà Insert LOW_PRIORITY¡£

      
    * Óà Select HIGH_PRIORITY À´Ê¹¼ìË÷¼ÇÂ¼Ìø¹ý¶ÓÁУ¬Ò²¾ÍÊÇ˵¼´Ê¹ÓÐÆäËû¿Í»§¶ËÕýҪдÈëÊý¾Ý£¬Ò²»áÏÈÈà Select Ö´ÐÐÍê¡£

      
    * ÔÚÒ»Ìõ Insert Óï¾äÖвÉÓöàÖØ¼Ç¼²åÈë¸ñʽ£¨ºÜ¶àÊý¾Ý¿â¶¼Ö§³Ö£©¡£

      
    * Óà LOAD DATA INFILE À´µ¼Èë´óÁ¿Êý¾Ý£¬Õâ±È Insert ¿ì¡£

      
    * Óà AUTO_INCREMENT ×Ö¶ÎÀ´Éú³ÉΨһֵ¡£

      
    * ¶¨ÆÚÖ´ÐÐ OPTIMIZE TABLE ·ÀֹʹÓö¯Ì¬¼Ç¼¸ñʽµÄ MyISAM ±í²úÉúË鯬¡£ÏêÇéÇë¿´"15.1.3 MyISAM Table Storage Formats"¡£

      
    * ²ÉÓà HEAP ±í£¬Ëü¿ÉÄÜ»áÌá¸ßËÙ¶È¡£ÏêÇéÇë¿´"15.1.3 MyISAM Table Storage Formats"¡£

      
    * Õý³£µÄWEB·þÎñÆ÷ÅäÖÃÖУ¬Í¼Æ¬Îļþ×îºÃÒÔÎļþ·½Ê½´æ´¢£¬Ö»ÔÚÊý¾Ý¿âÖб£´æÎļþµÄË÷ÒýÐÅÏ¢¡£Õâô×öµÄÔ­ÒòÊÇ£¬Í¨³£Çé¿öÏÂWEB·þÎñÆ÷¶ÔÓÚÎļþµÄ»º´æ×ÜÊÇ×öµÄ±ÈÊý¾Ý¿âÀ´µÃºÃ£¬Òò´ËʹÓÃÎļþ´æ´¢»áÈÃϵͳ¸üÈÝÒ×±äµÃ¸ü¿ì¡£

      
    * ¶ÔÓÚÆµ·±·ÃÎʵIJ»ÊǺÜÖØÒªµÄÊý¾Ý£¬¿ÉÒÔ±£´æÔÚÄÚ´æ±íÖУ¬ÀýÈç¶ÔÄÇЩweb¿Í»§¶Ë²»Äܱ£´æcookiesʱÓÃÓÚ±£´æ×îºóÒ»´ÎÏÔʾµÄ±êÌâµÈÐÅÏ¢¡£

      
    * ÔÚ²»Í¬±íÖÐÖµÏàͬµÄ×Ö¶ÎÓ¦¸Ã½«ËüÃÇÉùÃ÷ΪһÑùµÄÀàÐÍ¡£ÔÚ MySQL 3.23 ֮ǰ£¬²»Õâô×öµÄ»°ÔÚ±íÁ¬½Óʱ¾Í»á±È½ÏÂý¡£ÈÃ×Ö¶ÎÃû¾¡¿ÉÄܼòµ¥£¬ÀýÈ磬ÔÚÒ»¸ö½Ð×ö customer µÄ±íÖУ¬Óà name À´´úÌæ customer_name ×÷Ϊ×Ö¶ÎÃû¡£ÎªÁËÈÃ×Ö¶ÎÃûÔÚÆäËûÊý¾Ý¿âϵͳÖÐÒ²ÄÜÒÆÖ²£¬Ó¦¸Ã±£³ÖÔÚ18¸ö×Ö·û³¤¶ÈÒÔÄÚ¡£

      
    * Èç¹ûÐèÒªÕæÕýµÄ¸ßËÙ£¬½¨Òé¿´¿´¸÷ÖÖÊý¾Ý¿â·þÎñÆ÷Ö§³ÖµÄµ×²ãÊý¾Ý´æ´¢½Ó¿ÚÖ®¼äµÄÇø±ð¡£ÀýÈ磬ͨ¹ýÖ±½Ó·ÃÎÊMySQLµÄ MyISAM ´æ´¢ÒýÇæ£¬»á±Èͨ¹ýÆäËûµÄSQL½Ó¿Ú¿ì2-5±¶¡£ÕâÒªÇóÊý¾Ý±ØÐëºÍÓ¦ÓóÌÐòÔÚͬһ¸ö·þÎñÆ÷ÉÏ£¬²¢ÇÒËüͨ³£Ö»±»Ò»¸ö½ø³Ì·ÃÎÊ£¨ÒòΪÍⲿÎļþËøÈ·ÊµÂý£©¡£Ö»ÓÃÒ»¸ö½ø³Ì¾Í¿ÉÒÔÏû³ýÔÚMySQL·þÎñÆ÷ÉÏÒýÈëµ×²ãµÄ MyISAM Ö¸ÁîÒý·¢µÄÎÊÌâÁË£¨ÕâÈÝÒ×»ñµÃ¸ü¸ßÐÔÄÜ£¬Èç¹ûÐèÒªµÄ»°£©¡£ÓÉÓÚÊý¾Ý¿â½Ó¿ÚÉè¼ÆµÄ±È½ÏϸÐÄ£¬¾ÍºÜÈÝÒ×Ö§³ÖÕâÖÖÓÅ»¯·½Ê½ÁË¡£

      
    * Èç¹ûʹÓÃÊý×ÖÐÍÊý¾ÝµÄ»°£¬ÔںܶàÇé¿öÏÂÏëÒª·ÃÎÊÊý¾Ý¿â£¨Ê¹ÓÃÔÚÏßÁ¬½Ó£©µÄÐÅÏ¢»á±È²ÉÓÃÎı¾ÎļþÀ´µÃ¿ì¡£ÓÉÓÚÊý×ÖÐÍÐÅÏ¢Ïà±ÈÎı¾ÎļþÔÚÊý¾Ý¿âÖд洢µÄ¸ü¼Ó½ô´Õ£¬Òò´Ë·ÃÎÊʱֻÐèÒª¸üÉٵĴÅÅÌËÑË÷¡£¶øÇÒÔÚÓ¦ÓóÌÐòÖÐÒ²¿ÉÒÔ½ÚÊ¡´úÂ룬ÒòΪÎÞÐè½âÎöÎı¾ÎļþÒÔÕÒµ½¶ÔÓ¦µÄÐкÍ×ֶΡ£

      
    * Êý¾Ý¿â¸´ÖƶÔһЩ²Ù×÷»áÓÐÐÔÄÜÉϵÄÒæ´¦¡£¿ÉÒÔ½«¿Í»§¶Ë´Ó¶à¸ö¸´ÖÆ·þÎñÆ÷ÉÏÈ¡µÃÊý¾Ý£¬Õâ¾ÍÄܽ«¸ºÔØ·Ö̯ÁË¡£ÎªÁ˱ÜÃⱸ·ÝÊý¾Ýʱ»áÈÃÖ÷·þÎñÆ÷±äÂý£¬»¹¿ÉÒÔ½«±¸·Ý·ÅÔÚ´Ó·þÎñÆ÷ÉÏ¡£ÏêÇéÇë¿´"6 Replication in MySQL"¡£

      
    * ¶¨Òå MyISAM ±íʱÔö¼ÓÑ¡Ïî DELAY_KEY_WRITE=1£¬ÕâÑùµÄ»°¾Í»áÁíË÷Òý¸üиü¿ì£¬ÒòΪֻÓеȵ½Êý¾Ý±í¹Ø±ÕÁ˲ŻáˢдÅÅÌ¡£²»¹ýȱµãÊÇ¿ÉÄÜ»áÔÚÊý¾Ý±í»¹´ò¿ªÊ±·þÎñÆ÷±»É±ËÀ£¬¿ÉÒÔʹÓòÎÊý --myisam-recover À´±£Ö¤Êý¾ÝµÄ°²È«£¬»òÕßÔÚÊý¾Ý¿âÖØÆôǰÔËÐÐ myisamchk ÃüÁ¾¡¹ÜÈç´Ë£¬ÔÚÕâÖÖÇé¿öÏ£¬Ê¹Óà DELAY_KEY_WRITE µÄ»°Ò²²»»á¶ªÊ§Èκζ«Î÷£¬ÒòΪË÷Òý×ÜÊÇ¿ÉÒÔ´ÓÊý¾ÝÖÐÖØÐÂÉú³É£©¡£

ÒúÉú ·¢±íÓÚ 2007-11-16 13:27

7.3 Ëø
7.3.1 Ëø»úÖÆ

µ±Ç°MySQLÒѾ­Ö§³Ö ISAM, MyISAM, MEMORY (HEAP) ÀàÐͱíµÄ±í¼¶ËøÁË£¬BDB ±íÖ§³ÖÒ³¼¶Ëø£¬InnoDB ±íÖ§³ÖÐм¶Ëø¡£
ºÜ¶àʱºò£¬¿ÉÒÔͨ¹ý¾­ÑéÀ´²Â²âʲôÑùµÄËø¶ÔÓ¦ÓóÌÐò¸üºÏÊÊ£¬²»¹ýͨ³£ºÜÄÑ˵һ¸öËø±È±ðµÄ¸üºÃ£¬ÕâÈ«¶¼ÒªÒÀ¾ÝÓ¦ÓóÌÐòÀ´¾ö¶¨£¬²»Í¬µÄµØ·½¿ÉÄÜÐèÒª²»Í¬µÄËø¡£
ÏëÒª¾ö¶¨ÊÇ·ñÐèÒª²ÉÓÃÒ»¸öÖ§³ÖÐм¶ËøµÄ´æ´¢ÒýÇæ£¬¾ÍÒª¿´¿´Ó¦ÓóÌÐò¶¼Òª×öʲô£¬ÆäÖеIJéѯ¡¢¸üÐÂÓï¾äÊÇÔõôÓõġ£ÀýÈ磬ºÜ¶àµÄwebÓ¦ÓóÌÐò´óÁ¿µÄ×ö²éѯ£¬ºÜÉÙɾ³ý£¬Ö÷ÒªÊÇ»ùÓÚË÷ÒýµÄ¸üУ¬Ö»ÍùÌØ¶¨µÄ±íÖвåÈë¼Ç¼¡£²ÉÓûù±¾µÄMySQL MyISAM ±í¾ÍºÜºÏÊÊÁË¡£
MySQLÖÐ¶Ô±í¼¶ËøµÄ´æ´¢ÒýÇæÀ´ËµÊÇÊÍ·ÅËÀËøµÄ¡£±ÜÃâËÀËø¿ÉÒÔÕâÑù×öµ½£ºÔÚÈκβéѯ֮ǰÏÈÇëÇóËø£¬²¢ÇÒ°´ÕÕÇëÇóµÄ˳ÐòËø±í¡£
MySQLÖÐÓÃÓÚ WRITE£¨Ð´£© µÄ±íËøµÄʵÏÖ»úÖÆÈçÏ£º

    * Èç¹û±íûÓмÓËø£¬ÄÇô¾Í¼ÓÒ»¸öÐ´Ëø¡£
    * ·ñÔòµÄ»°£¬½«ÇëÇó·Åµ½Ð´Ëø¶ÓÁÐÖС£

MySQLÖÐÓÃÓÚ READ£¨¶Á£© µÄ±íËøµÄʵÏÖ»úÖÆÈçÏ£º

    * Èç¹û±íûÓмÓÐ´Ëø£¬ÄÇô¾Í¼ÓÒ»¸ö¶ÁËø¡£
    * ·ñÔòµÄ»°£¬½«ÇëÇó·Åµ½¶ÁËø¶ÓÁÐÖС£

µ±ËøÊͷźó£¬Ð´Ëø¶ÓÁÐÖеÄÏ߳̿ÉÒÔÓÃÕâ¸öËø×ÊÔ´£¬È»ºó²ÅÂÖµ½¶ÁËø¶ÓÁÐÖеÄÏ̡߳£
Õâ¾ÍÊÇ˵£¬Èç¹û±íÀïÓкܶà¸üвÙ×÷µÄ»°£¬ÄÇô Select ±ØÐëµÈµ½ËùÓеĸüж¼Íê³ÉÁËÖ®ºó²ÅÄÜ¿ªÊ¼¡£
´Ó MySQL 3.23.33 ¿ªÊ¼£¬¿ÉÒÔͨ¹ý״̬±äÁ¿ Table_locks_waited ºÍ Table_locks_immediate À´·ÖÎöϵͳÖеÄËø±íÕù¶áÇé¿ö£º

mysql> SHOW STATUS LIKE 'Table%';+-----------------------+---------+| Variable_name         | Value   |+-----------------------+---------+| Table_locks_immediate | 1151552 || Table_locks_waited    | 15324   |+-----------------------+---------+

ÔÚ MySQL 3.23.7£¨ÔÚWindowsÉÏÊÇ3.23.25£©ÒÔºó£¬ÔÚ MyISAM ±íÖÐֻҪûÓгåÍ»µÄ Insert ²Ù×÷£¬¾Í¿ÉÒÔÎÞÐèʹÓÃËø±í×ÔÓɵز¢ÐÐÖ´ÐÐ Insert ºÍ Select Óï¾ä¡£Ò²¾ÍÊÇ˵£¬¿ÉÒÔÔÚÆäËü¿Í»§¶ËÕýÔÚ¶ÁÈ¡ MyISAM ±í¼Ç¼µÄͬʱʱ²åÈëмǼ¡£Èç¹ûÊý¾ÝÎļþµÄÖмäûÓпÕÓàµÄ´ÅÅÌ¿éµÄ»°£¬¾Í²»»á·¢Éú³åÍ»ÁË£¬ÒòΪÕâÖÖÇé¿öÏÂËùÓеÄмǼ¶¼»áдÔÚÊý¾ÝÎļþµÄĩ⣨µ±ÔÚ±íµÄÖмä×öɾ³ý»òÕ߸üвÙ×÷ʱ£¬¾Í¿ÉÄܵ¼Ö¿ն´£©¡£µ±¿Õ¶´±»ÐÂÊý¾ÝÌî³äºó£¬²¢ÐвåÈëÌØÐԾͻá×Ô¶¯ÖØÐ±»ÆôÓÃÁË¡£
Èç¹ûÏëÒªÔÚÒ»¸ö±íÉÏ×ö´óÁ¿µÄ Insert ºÍ Select ²Ù×÷£¬µ«ÊDz¢ÐеIJåÈëÈ´²»¿ÉÄÜʱ£¬¿ÉÒÔ½«¼Ç¼²åÈëµ½ÁÙʱ±íÖУ¬È»ºó¶¨ÆÚ½«ÁÙʱ±íÖеÄÊý¾Ý¸üе½Êµ¼ÊµÄ±íÀï¡£¿ÉÒÔÓÃÒÔÏÂÃüÁîʵÏÖ£º

mysql> LOCK TABLES real_table WRITE, insert_table WRITE;mysql> Insert INTO real_table Select * FROM insert_table;mysql> TRUNCATE TABLE insert_table;mysql> UNLOCK TABLES;

InnoDB ʹÓÃÐм¶Ëø£¬BDB ʹÓÃÒ³¼¶Ëø¡£¶ÔÓÚ InnoDB ºÍ BDB ´æ´¢ÒýÇæÀ´Ëµ£¬ÊÇ¿ÉÄܲúÉúËÀËøµÄ¡£ÕâÊÇÒòΪ InnoDB »á×Ô¶¯²¶»ñÐÐËø£¬BDB »áÔÚÖ´ÐÐ SQL Óï¾äʱ²¶»ñÒ³ËøµÄ£¬¶ø²»ÊÇÔÚÊÂÎñµÄ¿ªÊ¼¾ÍÕâô×ö¡£
Ðм¶ËøµÄÓŵãÓУº

    * ÔںܶàÏß³ÌÇëÇó²»Í¬¼Ç¼ʱ¼õÉÙ³åÍ»Ëø¡£
    * ÊÂÎñ»Ø¹öʱ¼õÉٸıäÊý¾Ý¡£
    * ʹ³¤Ê±¼ä¶Ôµ¥¶ÀµÄÒ»ÐмǼ¼ÓËø³ÉΪ¿ÉÄÜ¡£

Ðм¶ËøµÄȱµãÓУº

    * ±ÈÒ³¼¶ËøºÍ±í¼¶ËøÏûºÄ¸ü¶àµÄÄÚ´æ¡£
    * µ±ÔÚ´óÁ¿±íÖÐʹÓÃʱ£¬±ÈÒ³¼¶ËøºÍ±í¼¶Ëø¸üÂý£¬ÒòΪËûÐèÒªÇëÇó¸ü¶àµÄËù×ÊÔ´¡£
    * µ±ÐèҪƵ·±¶Ô´ó²¿·ÖÊý¾Ý×ö GROUP BY ²Ù×÷»òÕßÐèҪƵ·±É¨ÃèÕû¸ö±íʱ£¬¾ÍÃ÷ÏÔµÄ±ÈÆäËüËø¸üÔã¸â¡£
    * ʹÓøü¸ß²ãµÄËøµÄ»°£¬¾ÍÄܸü·½±ãµÄÖ§³Ö¸÷ÖÖ²»Í¬µÄÀàÐÍÓ¦ÓóÌÐò£¬ÒòΪÕâÖÖËøµÄ¿ªÏú±ÈÐм¶ËøÐ¡¶àÁË¡£

±í¼¶ËøÔÚÏÂÁм¸ÖÖÇé¿öϱÈÒ³¼¶ËøºÍÐм¶Ëø¸üÓÅÔ½£º

    * ºÜ¶à²Ù×÷¶¼ÊǶÁ±í¡£
    * ÔÚÑϸñÌõ¼þµÄË÷ÒýÉ϶ÁÈ¡ºÍ¸üУ¬µ±¸üлòÕßɾ³ý¿ÉÒÔÓõ¥¶ÀµÄË÷ÒýÀ´¶ÁÈ¡µÃµ½Ê±£º

      Update tbl_name SET column=value Where unique_key_col=key_value;    Delete FROM tbl_name Where unique_key_col=key_value;   

    * Select ºÍ Insert Óï¾ä²¢·¢µÄÖ´ÐУ¬µ«ÊÇÖ»ÓкÜÉÙµÄ Update ºÍ Delete Óï¾ä¡£
    * ºÜ¶àµÄɨÃè±íºÍ¶ÔÈ«±íµÄ GROUP BY ²Ù×÷£¬µ«ÊÇûÓÐÈκÎд±í¡£

±í¼¶ËøºÍÐм¶Ëø»òÒ³¼¶ËøÖ®¼äµÄ²»Í¬Ö®´¦»¹ÔÚÓÚ£º
½«Í¬Ê±ÓÐÒ»¸öдºÍ¶à¸ö¶ÁµÄµØ·½×ö°æ±¾£¨ÀýÈçÔÚMySQLÖеIJ¢·¢²åÈ룩¡£Ò²¾ÍÊÇ˵£¬Êý¾Ý¿â/±íÖ§³Ö¸ù¾Ý¿ªÊ¼·ÃÎÊÊý¾Ýʱ¼äµãµÄ²»Í¬Ö§³Ö¸÷ÖÖ²»Í¬µÄÊÔͼ¡£ÆäËüÃûÓУºÊ±¼äÐг̣¬Ð´¸´ÖÆ£¬»òÕßÊǰ´Ðè¸´ÖÆ¡£
Ô­ÎÄ£º Versioning (such as we use in MySQL for concurrent inserts) where you can have one writer at the same time as many readers. This means that the database/table supports different views for the data depending on when you started to access it. Other names for this are time travel, copy on write, or copy on demand.
°´Ðè¸´ÖÆÔںܶàÇé¿öϱÈÒ³¼¶Ëø»òÐм¶ËøºÃ¶àÁË¡£¾¡¹ÜÈç´Ë£¬×Çé¿öʱ»¹ÊÇ±ÈÆäËüÕý³£ËøÊ¹ÓÃÁ˸ü¶àµÄÄÚ´æ¡£
¿ÉÒÔÓÃÓ¦ÓóÌÐò¼¶ËøÀ´´úÌæÐм¶Ëø£¬ÀýÈçMySQLÖÐµÄ GET_LOCK() ºÍ RELEASE_LOCK()¡£µ«ËüÃÇÊÇȰ¸æËø£¨Ô­ÎÄ£ºThese are advisory locks£©£¬Òò´ËÖ»ÄÜÓÃÓÚ°²È«¿ÉÐŵÄÓ¦ÓóÌÐòÖС£
7.3.2 Ëø±í

ΪÁËÄÜÓпìËÙµÄËø£¬MySQL³ýÁË InnoDB ºÍ BDB ÕâÁ½ÖÖ´æ´¢ÒýÇæÍ⣬ËùÓеͼÊÇÓÃ±í¼¶Ëø£¨¶ø·ÇÒ³¡¢ÐС¢Áм¶Ëø£©¡£
¶ÔÓÚ InnoDB ºÍ BDB ±í£¬MySQLÖ»ÓÐÔÚÖ¸¶¨Óà LOCK TABLES Ëø±íʱ²ÅʹÓÃ±í¼¶Ëø¡£ÔÚÕâÁ½ÖÖ±íÖУ¬½¨Òé×îºÃ²»ÒªÊ¹Óà LOCK TABLES£¬ÒòΪ InnoDB ×Ô¶¯²ÉÓÃÐм¶Ëø£¬BDB ÓÃÒ³¼¶ËøÀ´±£Ö¤ÊÂÎñµÄ¸ôÀë¡£
Èç¹ûÊý¾Ý±íºÜ´ó£¬ÄÇôÔÚ´ó¶àÊýÓ¦ÓÃÖÐ±í¼¶Ëø»á±ÈÐм¶ËøºÃ¶àÁË£¬²»¹ýÕâÓÐһЩÏÝÚå¡£
±í¼¶ËøÈúܶàÏ߳̿ÉÒÔͬʱ´ÓÊý¾Ý±íÖжÁÈ¡Êý¾Ý£¬µ«ÊÇÈç¹ûÁíÒ»¸öÏß³ÌÏëҪдÊý¾ÝµÄ»°£¬¾Í±ØÐëÒªÏÈÈ¡µÃÅÅËû·ÃÎÊ¡£ÕýÔÚ¸üÐÂÊý¾Ýʱ£¬±ØÐëÒªµÈµ½¸üÐÂÍê³ÉÁË£¬ÆäËûÏ̲߳ÅÄÜ·ÃÎÊÕâ¸ö±í¡£
¸üвÙ×÷ͨ³£ÈÏΪ±È¶ÁÈ¡¸üÖØÒª£¬Òò´ËËüµÄÓÅÏȼ¶¸ü¸ß¡£²»¹ý×îºÃÒªÏÈÈ·ÈÏ£¬Êý¾Ý±íÊÇ·ñÓÐºÜ¸ßµÄ Select ²Ù×÷£¬¶ø¸üвÙ×÷²¢·ÇºÜ¡®¼±Ð衯¡£
±íËøËøÔÚÒ»¸öÏß³ÌÔڵȴý£¬ÒòΪ´ÅÅ̿ռäÂúÁË£¬µ«ÊÇÈ´ÐèÒªÓпÕÓàµÄ´ÅÅ̿ռ䣬Õâ¸öÏ̲߳ÅÄܼÌÐø´¦Àíʱ¾ÍÓÐÎÊÌâÁË¡£ÕâÖÖÇé¿öÏ£¬ËùÓÐÒª·ÃÎÊÕâ¸ö³öÎÊÌâµÄ±íµÄÏ̶߳¼»á±»ÖÃΪµÈ´ý״̬£¬Ö±µ½ÓÐÊ£Óà´ÅÅ̿ռäÁË¡£
±íËøÔÚÒÔÏÂÉèÏëÇé¿öÖоͲ»ÀûÁË£º

    * Ò»¸ö¿Í»§¶ËÌá½»ÁËÒ»¸öÐèÒª³¤Ê±¼äÔËÐÐµÄ Select ²Ù×÷¡£
    * ÆäËû¿Í»§¶Ë¶Ôͬһ¸ö±íÌá½»ÁË Update ²Ù×÷£¬Õâ¸ö¿Í»§¶Ë¾ÍÒªµÈµ½ Select Íê³ÉÁ˲ÅÄÜ¿ªÊ¼Ö´ÐС£
    * ÆäËû¿Í»§¶ËÒ²¶Ôͬһ¸ö±íÌá½»ÁË Select ÇëÇó¡£ÓÉÓÚ Update µÄÓÅÏȼ¶¸ßÓÚ Select£¬ËùÒÔ Select ¾Í»áÏȵȵ½ Update Íê³ÉÁËÖ®ºó²Å¿ªÊ¼Ö´ÐУ¬ËüÒ²ÔڵȴýµÚÒ»¸ö Select ²Ù×÷¡£

ÏÂÁÐËùÊö¿ÉÒÔ¼õÉÙ±íËø´øÀ´µÄ×ÊÔ´Õù¶á£º

    * Èà Select ËٶȾ¡Á¿¿ì£¬Õâ¿ÉÄÜÐèÒª´´½¨Ò»Ð©ÕªÒª±í¡£
    * Æô¶¯ mysqld ʱʹÓòÎÊý --low-priority-updates¡£Õâ¾Í»áÈøüвÙ×÷µÄÓÅÏȼ¶µÍÓÚ Select¡£ÕâÖÖÇé¿öÏ£¬ÔÚÉÏÃæµÄ¼ÙÉèÖУ¬µÚ¶þ¸ö Select ¾Í»áÔÚ Insert ֮ǰִÐÐÁË£¬¶øÇÒÒ²ÎÞÐèµÈ´ýµÚÒ»¸öSelect ÁË¡£
    * ¿ÉÒÔÖ´ÐÐ SET LOW_PRIORITY_UpdateS=1 ÃüÁָ¶¨ËùÓеĸüвÙ×÷¶¼·Åµ½Ò»¸öÖ¸¶¨µÄÁ´½ÓÖÐÈ¥Íê³É¡£ÏêÇéÇë¿´¡°14.5.3.1 SET Syntax¡±¡£
    * Óà LOW_PRIORITY ÊôÐÔÀ´½µµÍ Insert£¬Update£¬Delete µÄÓÅÏȼ¶¡£
    * Óà HIGH_PRIORITY À´Ìá¸ß Select Óï¾äµÄÓÅÏȼ¶¡£ÏêÇéÇë¿´¡°14.1.7 Select Syntax¡±¡£
    * ´ÓMySQL 3.23.7 ¿ªÊ¼£¬¿ÉÒÔÔÚÆô¶¯ mysqld ʱָ¶¨ÏµÍ³±äÁ¿ max_write_lock_count Ϊһ¸ö±È½ÏµÍµÄÖµ£¬ËüÄÜÇ¿ÖÆÁÙʱµØÌá¸ß±íµÄ²åÈëÊý´ïµ½Ò»¸öÌØ¶¨ÖµºóµÄËùÓÐ Select ²Ù×÷µÄÓÅÏȼ¶¡£ËüÔÊÐíÔÚ WRITE Ëø´ïµ½Ò»¶¨ÊýÁ¿ºóÓÐ READ Ëø¡£
    * µ± Insert ºÍ Select Ò»ÆðʹÓóöÏÖÎÊÌâʱ£¬¿ÉÒÔת¶ø²ÉÓà MyISAM ±í£¬ËüÖ§³Ö²¢·¢µÄSelect ºÍ Insert ²Ù×÷¡£
    * µ±ÔÚͬһ¸ö±íÉÏͬʱÓвåÈëºÍɾ³ý²Ù×÷ʱ£¬Insert DELAYED ¿ÉÄÜ»áºÜÓÐÓá£ÏêÇéÇë¿´¡°14.1.4.2 Insert DELAYED Syntax¡±¡£
    * µ± Select ºÍ Delete Ò»ÆðʹÓóöÏÖÎÊÌâʱ£¬Delete µÄ LIMIT ²ÎÊý¿ÉÄÜ»áºÜÓÐÓá£ÏêÇéÇë¿´¡°14.1.1 Delete Syntax¡±
    * Ö´ÐÐ Select ʱʹÓà SQL_BUFFER_RESULT ÓÐÖúÓÚ¼õ¶ÌËø±íµÄ³ÖÐøÊ±¼ä.ÏêÇéÇë¿´¡°14.1.7 Select Syntax¡±¡£
    * ¿ÉÒÔÐÞ¸ÄÔ´´úÂë `mysys/thr_lock.c'£¬Ö»ÓÃÒ»¸öËù¶ÓÁС£ÕâÖÖÇé¿öÏ£¬Ð´ËøºÍ¶ÁËøµÄÓÅÏȼ¶¾ÍÒ»ÑùÁË£¬Õâ¶ÔһЩӦÓÿÉÄÜÓаïÖú¡£

ÒÔÏÂÊÇMySQLËøµÄһЩ½¨Ò飺

    * Ö»Òª¶Ôͬһ¸ö±íûÓдóÁ¿µÄ¸üкͲéѯ²Ù×÷»ìÔÚÒ»Æð£¬Ä¿Ç°µÄÓû§²¢²»ÊÇÎÊÌâ¡£
    * Ö´ÐÐ LOCK TABLES À´Ìá¸ßËÙ¶È£¨ºÜ¶à¸üвÙ×÷·ÅÔÚÒ»¸öËøÖ®ÖбÈûÓÐËøµÄºÜ¶à¸üпì¶àÁË£©¡£½«Êý¾Ý²ð·Ö¿ªµ½¶à¸ö±íÖпÉÄÜÒ²ÓаïÖú¡£
    * µ±MySQLÅöµ½ÓÉÓÚËø±íÒýÆðµÄËÙ¶ÈÎÊÌâʱ£¬½«±íÀàÐÍת»»³É InnoDB »ò BDB ¿ÉÄÜÓÐÖúÓÚÌá¸ßÐÔÄÜ¡£ÏêÇéÇë¿´¡°16 The InnoDB Storage Engine¡±ºÍ¡°15.4 The BDB (BerkeleyDB) Storage Engine¡±¡£

ÒúÉú ·¢±íÓÚ 2007-11-16 13:28

7.4ÓÅ»¯Êý¾Ý¿â½á¹¹
7.4.1Éè¼ÆÑ¡Ôñ

MySQL½«¼Ç¼Êý¾ÝºÍË÷ÒýÊý¾Ý·Ö±ð´æ·ÅÔÚ²»Í¬µÄÎļþÀï¡£ÆäËûºÜ¶à£¨¼¸ºõËùÓУ©Êý¾Ý¿â¶¼½«Õâ¼Ç¼ºÍË÷ÒýÊý¾Ý´æÔÚͬһ¸öÎļþÖС£ÎÒÃÇÏàÐÅMySQLµÄÑ¡Ôñ¶ÔÓÚÏÖÔÚ¸ü´ó·¶Î§µÄϵͳ¸üºÏÊÊ¡£

ÁíÒ»¸ö´æ´¢¼Ç¼Êý¾ÝµÄ·½·¨Êǽ«Ã¿¸ö×ֶεÄÐÅÏ¢±£´æÔÚ¶ÀÁ¢µÄÇøÓòÖУ¨ÀýÈç SDBM ºÍFocus£©¡£Õ⵱ÿ¸ö²éѯ¶¼Òª·ÃÎʲ»Ö»Ò»¸ö×ֶεÄʱºò»á´ò»÷ÐÔÄÜ¡£ÓÉÓÚµ±·ÃÎÊÔ½¶àµÄ×ֶκó£¬ÐÔÄÜϽµµÄÔ½À÷º¦£¬Òò´ËÎÒÃÇÈÏΪÕâÖÖģʽ²»ÊʺÏÕý³£Ä¿µÄµÄÊý¾Ý¿â¡£

¸ü¶àµÄÇé¿öÊǰÑË÷ÒýºÍÊý¾Ý±£´æÔÚÒ»Æð(ÀýÈç oracle/SysbaseµÈ)¡£ÕâÑùµÄ»°£¬¾ÍÄÜÔÚË÷ÒýµÄÒ¶×ÓÒ³ÃæÕÒµ½¼Ç¼µÄÐÅÏ¢¡£ÕâÖÖ²¼¾ÖµÄÓÐÀûÖ®´¦ÔÚÓÚ£¬ºÜ¶àʱºòÓÉÓÚË÷Òý±»»º´æµÄ±È½ÏºÃ£¬Òò´Ë¾ÍÄܽÚÊ¡´ÅÅ̶ÁÈ¡£¬²»¹ýÒ²ÓÐÈçÏÂȱµã£º

    * ÓÉÓÚÐèҪͨ¹ý¶ÁÈ¡Ë÷Òý²ÅÄܵõ½Êý¾Ý£¬Òò´ËɨÃè±í¾Í¸üÂýÁË¡£
    * ²éѯʱֻÄܸù¾ÝË÷ÒýÀ´È¡µÃÊý¾Ý¡£
    * ÐèÒª¸ü¶àµÄ´ÅÅ̿ռ䣬ÒòΪ±ØÐë´Ó½ÚµãÖи´ÖÆË÷Òý(²»Äܽ«¼Ç¼±£´æÔÚ½ÚµãÖÐ)¡£
    * ɾ³ý»áʹ±í±äµÃ¸üÂý(ÒòΪɾ³ýʱ²¢Ã»ÓиüнڵãÖеÄË÷Òý)¡£
    * ºÜÄÑÖ»»º´æË÷ÒýÊý¾Ý¡£

7.4.2ÈÃÊý¾Ý±äµÃ¸üСÇÉÁé»î

ÓÅ»¯µÄ×î»ù±¾Ô­ÔòÖ®Ò»¾ÍÊǾ¡¿ÉÄܰÑÊý¾Ý±íÉè¼ÆµÄÕ¼ÓøüÉÙ´ÅÅ̿ռ䡣ÕâÄܵõ½¾Þ´óµÄÐÔÄܸÄÉÆ£¬ÒòΪ´ÅÅ̶ÁÈ¡±È½Ï¿ì£¬²¢ÇÒԽСµÄ±íÔÚ´¦Àí²éѯÄÚÈÝʱֻÐè¸üÉÙµÄÖ÷ÄÚ´æ¡£ÔÚСµãµÄ×Ö¶ÎÉÏ×öË÷ÒýÒ²Ö»Ðè¸üÉÙµÄ×ÊÔ´¸ºÔØ¡£

MySQLÖ§³ÖºÜ¶àÖÖ²»Í¬µÄ±íÀàÐÍÒÔ¼°¼Ç¼¸ñʽ¡£¿ÉÒÔ¾ö¶¨Ã¿¸ö±íÒª²ÉÓÃÄÇÖÖ´æ´¢ÒýÇæ/Ë÷Òý·½Ê½¡£¸ù¾Ý²»Í¬µÄÓ¦ÓóÌÐòÑ¡ÔñÊʵ±µÄ±í¸ñʽÄÜ´ó´óÌá¸ßÐÔÄÜ¡£ÏêÇéÇë¿´¡°15MySQL Storage Engines and Table Types¡±¡£

ÓÃÒÔÏ·½·¨¿ÉÒÔÌá¸ß±íÐÔÄÜͬʱ½ÚÊ¡´æ´¢¿Õ¼ä£º

    * ¾¡¿ÉÄÜʹÓÃ×îÓÐЧ(×îСµÄ)Êý¾ÝÀàÐÍ¡£MySQLÓкü¸ÖÖÌØ¶¨µÄÀàÐÍÄܽÚÊ¡´ÅÅ̺ÍÄÚ´æ¡£
    * ¾¡¿ÉÄÜʹÓøüСµÄÕûÊýÀàÐÍ¡£ÀýÈ磬MEDIUMINTͨ³£±È¸üºÏÊÊ INT¡£
    * ¾¡¿ÉÄܶ¨Òå×Ö¶ÎÀàÐÍΪ NOT NULL¡£Õâ»áÔËÐеĸü¿ì£¬¶øÇÒÿ¸ö×ֶζ¼»á½ÚÊ¡1¸öbit¡£Èç¹ûÔÚÓ¦ÓóÌÐòÖÐȷʵÐèÒªÓõ½ NULL£¬ÄÇô¾ÍÃ÷È·µÄÖ¸¶¨Ëü¡£²»¹ýÒª±ÜÃâËùÓеÄ×Ö¶ÎĬÈÏÖµÊÇ NULL¡£
    * ÔÚ MyISAM ±íÖУ¬Èç¹ûûÓÐÓõ½Èκα䳤×Ö¶Î(VARCHAR, TEXT, »ò BLOB×Ö¶Î)µÄ»°£¬ÄÇô¾Í²ÉÓù̶¨´óСµÄ¼Ç¼¸ñʽ¡£ÕâÑùËٶȸü¿ì£¬²»¹ý¿ÉÄÜ»áÀ˷ѵã¿Õ¼ä¡£ÏêÇéÇë¿´¡°15.1.3 MyISAMTable Storage Formats¡±¡£
    * ±íµÄÖ÷Ë÷ÒýÓ¦¾¡¿ÉÄ̡ܶ£ÕâÑùµÄ»°»áÿÌõ¼Ç¼¶¼ÓÐÃû×Ö±êʶÇÒ¸ü¸ßЧ¡£
    * Ö»´´½¨È·ÊµÐèÒªµÄË÷Òý¡£Ë÷ÒýÓÐÀûÓÚ¼ìË÷¼Ç¼£¬µ«ÊDz»ÀûÓÚ¿ìËÙ±£´æ¼Ç¼¡£Èç¹û×ÜÊÇÒªÔÚ±íµÄ×éºÏ×Ö¶ÎÉÏ×öËÑË÷£¬ÄÇô¾ÍÔÚÕâЩ×Ö¶ÎÉÏ´´½¨Ë÷Òý¡£Ë÷ÒýµÄµÚÒ»²¿·Ö±ØÐëÊÇ×ʹÓõÄ×Ö¶Î.Èç¹û×ÜÊÇÐèÒªÓõ½ºÜ¶à×ֶΣ¬Ê×ÏȾÍÓ¦¸Ã¶à¸´ÖÆÕâЩ×ֶΣ¬Ê¹Ë÷Òý¸üºÃµÄѹËõ¡£
    * Ò»¸ö×ֶκÜÓпÉÄÜÔÚ×ʼµÄһЩÊýÁ¿×Ö·ûÊǸ÷²»ÏàͬµÄ£¬Òò´ËÔÚÕâЩ×Ö·ûÉÏ×öË÷Òý¸üºÏÊÊ¡£MySQLÖ§³ÖÔÚÒ»¸ö×ֶεÄ×î×󲿷Ö×Ö·û×öË÷Òý¡£Ë÷ÒýÔ½¶Ì£¬ËÙ¶ÈÔ½¿ì£¬²»½öÊÇÒòΪËüÕ¼ÓøüÉٵĴÅÅ̿ռ䣬ҲÒòΪÕâÌá¸ßÁËË÷Òý»º´æµÄÃüÖÐÂÊ£¬Óɴ˼õÉÙÁË´ÅÅÌËÑË÷¡£ÏêÇéÇë¿´¡°7.5.2Tuning Server Parameters¡±¡£
    * ÔÚijЩÇé¿öÏ£¬°ÑÒ»¸öƵ·±É¨ÃèµÄ±í·Ö¸î³ÉÁ½¸ö¸üÓÐÀû¡£ÔÚ¶Ô¶¯Ì¬¸ñʽ±íɨÃèÒÔÈ¡µÃÏà¹Ø¼Ç¼ʱ£¬Ëü¿ÉÄÜʹÓøüСµÄ¾²Ì¬¸ñʽ±íµÄÇé¿öϸüÊÇÈç´Ë¡£

7.4.3×Ö¶ÎË÷Òý

ËùÓеÄMySQL×Ö¶ÎÀàÐͶ¼Äܱ»Ë÷Òý¡£ÔÚÏà¹Ø×Ö¶ÎÉÏ×öË÷Òý¶ÔÌá¸ß Select Óï¾äµÄÐÔÄÜ×îÓÐЧ¡£

ÿ¸ö±íµÄ×î´óË÷Òý³¤¶ÈÒÔ¼°×î¶àË÷ÒýÊýÁ¿ÊÇÓɸ÷×ԵĴ洢ÒýÇæ¶¨ÒåºÃÁ˵ġ£ÏêÇéÇë¿´¡°15 MySQL Storage Engines and Table Types¡±¡£ËùÓеĴ洢ÒýÇæ¶Ôÿ¸ö±í¶¼ÖÁÉÙ¿ÉÒÔÖ§³Ö16¸öË÷Òý£¬Ë÷Òý³¤¶È×îСÊÇ 256 ×Ö½Ú¡£´ó²¿·Ö´æ´¢ÒýÇæµÄÏÞÖÆ¸ü¸ß¡£

Ë÷Òý¸ñʽÖÐʹÓà col_name(length) Óï·¨£¬¾ÍÄÜÖ»¶Ô CHAR »ò VARCHAR ×Ö¶Î×îÇ°ÃæµÄ length ¸ö×Ö·û×öË÷Òý¡£ÏóÀàËÆÕâÑùÖ»¶Ô×ֶεÄǰ׺²¿·Ö×öË÷ÒýÄÜÈÃË÷ÒýÎļþ¸üС¡£

MyISAM ºÍ InnoDB (´ÓMySQL 4.0.14¿ªÊ¼)´æ´¢ÒýÇæ»¹Ö§³ÖÔÚ BLOB ºÍ TEXT ×Ö¶ÎÉÏ×öË÷Òý£¬µ«ÊDZØÐëÖ¸¶¨Ë÷ÒýµÄǰ׺³¤¶È£¬ÀýÈ磺

Create TABLE test (blob_col BLOB, INDEX(blob_col(10)));

ǰ׺µÄ³¤¶È¿ÉÒÔ¶à´ï255×Ö½Ú(´ÓMySQL 4.1.2¿ªÊ¼£¬MyISAM ºÍ InnoDB ±íÖ§³Ö1000×Ö½Ú)¡£×¢Ò⣬ǰ׺³¤¶ÈÏÞÖÆÊÇÒÔ×Ö½ÚÊýºâÁ¿µÄ£¬È»¶ø Create TABLE Óï¾äÖеÄǰ׺³¤¶ÈÀí½â³ÉΪ×Ö·û¸öÊý¡£Òò´ËÔÚÖ¸¶¨×Ö¶ÎË÷Òýǰ׺³¤¶ÈʱҪ¿¼Âǵ½Ê¹Óöà×Ö½Ú×Ö·û¼¯×ֶεÄÇé¿öÁË¡£

´ÓMySQL 3.23.23¿ªÊ¼£¬¾Í¿ÉÒÔ´´½¨ FULLTEXT Ë÷ÒýÁË£¬ËüÃÇʹÓÃÈ«ÎÄËÑË÷¡£Ö»ÓÐ MyISAM ±íÖ§³Ö¶Ô CHAR,VARCHAR ºÍ TEXT ×Ö¶Î×ö FULLTEXT Ë÷Òý¡£Ö»¶ÔÕû¸ö×ֶμìË÷ÓÐЧ£¬²»Ö§³Ö²¿·Ö(ǰ׺)¼ìË÷¡£ÏêÇéÇë¿´¡°13.6 Full-Text Search Functions¡±¡£

´ÓMySQL 4.1.0¿ªÊ¼£¬»¹¿ÉÒÔ¿Õ¼äÀàÐÍ×Ö¶ÎÉÏ×öË÷Òý¡£Ä¿Ç°£¬Ö»ÓÐ MyISAM ´æ´¢ÒýÇæÖ§³Ö¿Õ¼äÀàÐÍ¡£¿Õ¼äË÷ÒýʹÓÃRÊ÷Ë÷Òý¡£

MEMORY (HEAP) ´æ´¢ÒýÇæÖ§³Ö¹þÏ£Ë÷Òý£¬´ÓMySQL 4.1.0¿ªÊ¼£¬ËüÒ¶Ö§³ÖBÊ÷Ë÷Òý¡£
7.4.4 ¶à×Ö¶ÎË÷Òý

MySQL¿ÉÒÔÔÚ¶à¸ö×Ö¶ÎÉÏ´´½¨Ë÷Òý£¬¿ÉÒÔÓɶà´ï15¸ö×Ö¶Î×é³É¡£¶ÔÌØ¶¨µÄ×Ö¶ÎÀàÐÍ£¬»¹¿ÉÒÔʹÓÃǰ׺Ë÷Òý(ÏêÇéÇë¿´"7.4.3 Column Indexes¡±)¡£

¶à×Ö¶ÎË÷Òý¿ÉÒÔÈÏΪÊÇÓÉË÷Òý×ֶεÄÖµÁ¬½ÓÔÚÒ»Æð¶ø³É£¬ÇÒ¾­¹ýÅÅÐòÖ®ºóµÄÊý×é¡£

MySQLÒÔÈçÏ·½·¨Ê¹Óöà×Ö¶ÎË÷Òý£ºÔÚ Where ×Ó¾äÖÐÖ¸¶¨ÁËÒÑÖªÊýÁ¿µÄË÷ÒýµÄµÚÒ»¸ö×ֶΣ¬²éѯ¾ÍºÜ¿ìÁË£¬ÉõÖÁÎÞÐèÖ¸¶¨ÆäËû×ֶεÄÖµ¡£

¼Ù¶¨Ò»¸ö±í½á¹¹ÈçÏ£º

Create TABLE test (id INT NOT NULL,last_name CHAR(30) NOT NULL,first_name CHAR(30) NOT NULL,PRIMARY KEY (id),INDEX name (last_name,first_name));

Ë÷Òý name ¸²¸ÇÁË last_name ºÍ first_name ×ֶΡ£Õâ¸öË÷ÒýÔÚ×Ö¶Î last_name ÉÏ»ò last_name ºÍ first_name Ò»ÆðµÄÖ¸¶¨·¶Î§ÄÚ²éѯʱÄÜÆðµ½×÷Óá£Òò´ËÕâ¸öË÷ÒýÔÚÒÔϼ¸¸ö²éѯÖж¼»á±»Óõ½£º

Select * FROM test Where last_name='Widenius';Select * FROM testWhere last_name='Widenius' AND first_name='Michael';Select * FROM testWhere last_name='Widenius'AND (first_name='Michael' or first_name='Monty');Select * FROM testWhere last_name='Widenius'AND first_name >='M' AND first_name < 'N';

²»¹ý£¬Ë÷Òý name ÔÚÒÔϼ¸¸ö²éѯÖв»»á±»Óõ½£º

Select * FROM test Where first_name='Michael';Select * FROM testWhere last_name='Widenius' or first_name='Michael';

¹ØÓÚMySQLÈçºÎʹÓÃË÷ÒýÀ´¸ÄÉÆ²éѯÐÔÄܵķ½Ê½ÔÚϸöÕ½ÚÖоßÌåÌÖÂÛ¡£

ÒúÉú ·¢±íÓÚ 2007-11-16 13:28

7.4.5 MySQLÈçºÎʹÓÃË÷Òý

Ë÷ÒýÓÃÓÚ¿ìËÙÕÒµ½Ìض¨Ò»Ð©ÖµµÄ¼Ç¼¡£Èç¹ûûÓÐË÷Òý£¬MySQL¾Í±ØÐë´ÓµÚÒ»ÐмǼ¿ªÊ¼¶ÁÈ¡Õû¸ö±íÀ´¼ìË÷¼Ç¼¡£±íÔ½´ó£¬×ÊÔ´ÏûºÄÔ½´ó¡£Èç¹ûÔÚ×Ö¶ÎÉÏÓÐË÷ÒýµÄ»°£¬MySQL¾ÍÄܺܿì¾ö¶¨¸Ã´ÓÊý¾ÝÎļþµÄÄĸöλÖÿªÊ¼ËÑË÷¼Ç¼£¬¶øÎÞÐë²éÕÒËùÓеÄÊý¾Ý¡£Èç¹û±íÖÐÓÐ1000Ìõ¼Ç¼µÄ»°£¬ÄÇôÕâÖÁÉÙ±È˳ÐòµØ¶ÁÈ¡Êý¾Ý¿ì100±¶¡£×¢Ò⣬Èç¹ûÐèÒª´æÈ¡¼¸ºõÈ«²¿1000Ìõ¼Ç¼µÄ»°£¬ÄÇô˳Ðò¶ÁÈ¡¾Í¸ü¿ìÁË£¬ÒòΪÕâÑù»áʹ´ÅÅÌËÑË÷×îÉÙ¡£

´ó²¿·ÖMySQLË÷Òý(PRIMARY KEY, UNIQUE,INDEX ºÍ FULLTEXT)¶¼ÊÇÒÔBÊ÷·½Ê½´æ´¢¡£Ö»ÓпռäÀàÐ͵Ä×Ö¶ÎʹÓÃRÊ÷´æ´¢£¬MEMORY (HEAP)±íÖ§³Ö¹þÏ£Ë÷Òý¡£

×Ö·û´®Ä¬È϶¼ÊÇ×Ô¶¯Ñ¹Ëõǰ׺ºÍºó׺ÖеĿոñ£¬ÏêÇéÇë¿´"14.2.5 Create INDEX Syntax"¡£

ͨ³££¬ÈçÏÂËùÊö¼¸ÖÖÇé¿öÏ¿ÉÒÔʹÓÃË÷Òý¡£¹þÏ£Ë÷Òý(ÓÃÓÚ MEMORY ±í)µÄ¶ÀÌØÖ®´¦ÔÚºóÃæ»áÌÖÂÛµ½¡£

    * ÏëÒª¾¡¿ìÕÒµ½Æ¥Åä Where ×Ó¾äµÄ¼Ç¼¡£
    * ¸ù¾ÝÌõ¼þÅųý¼Ç¼¡£Èç¹ûÓжà¸öË÷Òý¿É¹²Ñ¡ÔñµÄ»°£¬MySQLͨ³£Ñ¡ÔñÄÜÕÒµ½×îÉټǼµÄÄǸöË÷Òý¡£
    * ×ö±íÁ¬½Ó²éѯʱ´ÓÆäËû±íÖмìË÷¼Ç¼¡£
    * ÏëÒªÔÚÖ¸¶¨µÄË÷Òý×Ö¶Î key_col ÉÏÕÒµ½ËüµÄ MIN() »ò MAX() Öµ¡£ÓÅ»¯³ÌÐò»áÔÚ¼ì²éË÷ÒýµÄ
      key_col ×Ö¶Îǰ¾ÍÏȼì²éÆäËûË÷Òý²¿·ÖÊÇ·ñʹÓÃÁË Where key_part_# = constant ×Ӿ䡣ÕâÑùµÄ»°£¬
      MySQL»áΪ MIN() »ò MAX() ±í´ïʽ·Ö±ðµ¥¶À×öÒ»´ÎË÷Òý²éÕÒ£¬²¢ÇÒ½«ËüÌæ»»³É³£Êý¡£µ±ËùÓеıí´ïʽ¶¼±»Ìæ»»³É³£Êýºó£¬²éѯ¾ÍÁ¢¿Ì·µ»Ø¡£ÈçÏ£º

      

      Select MIN(key_part2),MAX(key_part2) FROM tbl_name Where key_part1=10;

    * ¶Ô±í×÷ÅÅÐò»ò·Ö×飬µ±ÔÚÒ»¸ö¿ÉÓõÄ×î×óǰ׺Ë÷ÒýÉÏ×ö·Ö×é»òÅÅÐòʱ(Èç ORDER
      BY key_part1, key_part2)¡£Èç¹ûËùÓеÄË÷Òý²¿·Ö¶¼°´ÕÕ DESC ÅÅÐò£¬Ë÷Òý¾Í°´µ¹ÐòÅÅÐò¡£ÏêÇéÇë¿´"7.2.9
      How MySQL Optimizes ORDER BY"¡£
    * ÓÐЩʱºò£¬²éѯ¿ÉÒÔÓÅ»¯Ê¹µÃÎÞÐè¼ÆËãÊý¾Ý¾ÍÄÜÖ±½ÓÈ¡µÃ½á¹û¡£µ±²éѯʹÓñíÖеÄÒ»¸öÊý×ÖÐÍ×ֶΣ¬ÇÒÕâ¸ö×Ö¶ÎÊÇË÷ÒýµÄ×î×󲿷֣¬Ôò¿ÉÄÜ´ÓË÷ÒýÊ÷ÖÐÄܺܿì¾ÍÈ¡µÃ½á¹û£º

      Select key_part3 FROM tbl_name Where key_part1=1

¼ÙÉèÓÐÈçÏ Select Óï¾ä£º

mysql> Select * FROM tbl_name Where col1=val1 AND col2=val2;

Èç¹ûÔÚ col1 ºÍ col2 ÉÏÓÐÒ»¸ö¶à×Ö¶ÎË÷ÒýµÄ»°£¬¾ÍÄÜÖ±½ÓÈ¡µÃ¶ÔÓ¦µÄ¼Ç¼ÁË¡£Èç¹ûÔÚ col1 ºÍ col2 ·Ö±ðÓжÀÁ¢µÄË÷Òý£¬ÄÇôÓÅ»¯³ÌÐò»áÏÈÕÒµ½ÏÞÖÆ×î¶àµÄÄǸöË÷Òý£¬È»ºó¸ù¾ÝÄĸöË÷ÒýÄÜÕÒµ½¸üÉٵļǼ¾Í¾ö¶¨Ê¹ÓÃÄĸöË÷Òý¡£

Èç¹û±íÀïÓÐÒ»¸ö¶à×Ö¶ÎË÷ÒýµÄ»°£¬ÄÇô¸ÃË÷ÒýµÄÈκÎ×î×óǰ׺²¿·Ö¶¼¿ÉÒÔ±»ÓÅ»¯³ÌÐòÓÃÀ´¼ìË÷¼Ç¼¡£ÀýÈ磬ÔÚ (col1, col2, col3) ÉÏÓÐÒ»¸öË÷Òý£¬ÄÇô°´×Ö¶Î×éºÏ (col1), (col1, col2), ºÍ (col1, col2,
col3) ËÑË÷µÄʱºò¶¼»áÓõ½Ë÷Òý¡£

MySQLÎÞ·¨Ê¹Ó÷Ç×î×óǰ׺Ë÷ÒýÖеIJ¿·ÖË÷Òý¡£¼ÙÈçÓÐÒÔÏ Select Óï¾ä£º

Select * FROM tbl_name Where col1=val1;Select * FROM tbl_name Where col2=val2;Select * FROM tbl_name Where col2=val2 AND col3=val3;

Èç¹ûÔÚ (col1, col2, col3) ÉÏÓÐÒ»¸öË÷Òý£¬Ö»ÓеÚÒ»¸ö²éѯÓõ½Ë÷ÒýÁË¡£µÚ¶þºÍµÚÈý¸ö¾¡¹Ü°üÀ¨ÁËË÷Òý×ֶΣ¬µ«ÊÇ (col2) ºÍ (col2, col3) ²¢·ÇË÷Òý (col1, col2, col3) µÄ×î×óǰ׺²¿·Ö¡£
µ±¶Ô×Ö¶Î×ö =, >, >=, <, <=, »ò BETWEEN ±È½Ï²Ù×÷ʱ£¬Ò²»áÓõ½Ë÷Òý¡£
MySQLÔÚ×ö LIKE ±È½ÏʱҲ¿ÉÄÜÓõ½Ë÷Òý£¬Èç¹û LIKE µÄ²ÎÊýÊÇ·ÇͨÅä×Ö·û¿ªÊ¼µÄ¹Ì¶¨×Ö·û´®µÄ»°¡£ÒÔÏ嵀 Select Óï¾ä¾ÍÓõ½ÁËË÷Òý£º

Select * FROM tbl_name Where key_col LIKE 'Patrick%';Select * FROM tbl_name Where key_col LIKE 'Pat%_ck%';

µÚÒ»¸ö²éѯÖУ¬Ö»ÓÐµÄ 'Patrick' <= key_col < 'Patricl' ¼Ç¼²Å»á±»¼ìË÷µ½¡£µÚ¶þ¸ö²éѯÖУ¬Ö»¼ìË÷ 'Pat' <= key_col < 'Pau' µÄ¼Ç¼¡£
ÒÔÏ Select Óï¾ä²»Ê¹ÓÃË÷Òý£º

Select * FROM tbl_name Where key_col LIKE '%Patrick%';Select * FROM tbl_name Where key_col LIKE other_col;

µÚÒ»¸öÓï¾äÖУ¬LIKE µÄ²ÎÊýÊÇÒÔͨÅä·û¿ªÊ¼µÄ¡£µÚ¶þ¸öÓï¾äÖУ¬LIKE µÄ²ÎÊý²»ÊÇÒ»¸ö³£Öµ¡£
MySQL 4.0¼°¸ü¸ß»á×öÒ»¸ö¶îÍâµÄ LIKE ÓÅ»¯¡£Èç¹ûʹÓà ... LIKE '%string%' ²¢ÇÒ string ³¬¹ý3¸ö×Ö·û£¬MySQL¾Í»áÓà Turbo Boyer-Moore Ëã·¨À´³õʼ»¯Ä£Ê½£¬²¢ÇÒÀûÓÃÕâ¸öģʽÀ´¼Ó¿ìËÑË÷¡£
Óà col_name IS NULL ËÑË÷ʱҲ»áʹÓÃË÷Òý£¬Èç¹û×Ö¶Î col_name ÉÏÓÐË÷ÒýµÄ»°¡£
ÈκÎÔÚ Where ×Ó¾äÖÐûÓпçԽȫ²¿ AND ¼¶·Ö¾äµÄË÷Òý¶¼²»»áÓÃÀ´ÓÅ»¯²éѯ¡£»»ÑÔÖ®£¬ÏëÒªÆôÓÃÒ»¸öË÷Òý£¬ÄÇôÔÚÈκΠAND ·Ö¾äÖж¼±ØÐëʹÓÃË÷ÒýµÄǰ׺×ֶΡ£
ÒÔÏ Where ×Ó¾äʹÓÃË÷Òý£º

... Where index_part1=1 AND index_part2=2 AND other_column=3/* index = 1 or index = 2 */... Where index=1 or A=10 AND index=2/* ÓÅ»¯ÁË like "index_part1='hello'" */... Where index_part1='hello' AND index_part3=5/* ʹÓÃË÷Òý index1£¬µ«Ã»ÓÐÓõ½ index2 »ò index3 */... Where index1=1 AND index2=2 or index1=3 AND index3=3;



ÒÔÏ Where ×Ӿ䲻ʹÓÃË÷Òý£º



    /* ûÓõ½ index_part1 */... Where index_part2=1 AND index_part3=2/* ËùÓÐµÄ AND ²¿·ÖûÓõ½Ë÷Òý */... Where index=1 or A=10/* Ë÷ÒýûÓпçԽȫ²¿×ֶΠ */... Where index_part1=1 or index_part2=10

ÓÐЩʱºò¾¡¹ÜÓпÉÓõÄË÷Òý£¬MySQLÒ²²»»áÓõ½ËüÃÇ¡£Ò»ÖÖÇé¿öÊÇÓÅ»¯³ÌÐòÈÏΪÈç¹ûʹÓÃË÷Òý»áÐèÒª¼ìË÷¸ü´ó²¿·ÖµÄ±í¼Ç¼(Õâʱºò£¬É¨Ãè±í¿ÉÄܸü¿ì£¬ÒòΪÕâÖ§ÐèÒª¸üÉÙµÄËÑË÷)¡£¾¡¹ÜÈç´Ë£¬Èç¹ûÓÐÒ»¸ö²éѯÓà LIMIT ÏÞÖÆÖ»¼ìË÷²¿·Ö¼Ç¼£¬MySQL¾ÍÒ»¶¨»áʹÓÃË÷Òý£¬ÒòΪÕâÑùÄܸü¿ì¼ìË÷µ½¸üÉټǼÀ´·µ»Ø¸ø½á¹û¡£
ÒÔÏÂÊǹþÏ£Ë÷ÒýµÄһЩ²»Í¬µÄÌØÐÔ£º

    * ËüÃÇÖ»ÓÃÓÚ = »ò <=> ±È½Ï(µ«²¢²»ºÜ¿ì)¡£

      

      
    * ÓÅ»¯³ÌÐòÎÞ·¨Ê¹ÓùþÏ£Ë÷ÒýÀ´¼ÓËÙ ORDER BY ²Ù×÷(ÕâÖÖË÷Òý²»ÄÜÓÃÓÚ°´Ë³ÐòËÑË÷ÏÂÒ»¸ö¼Ç¼)¡£

      

      
    * MySQL´óÖÂÎÞ·¨Åжϳö½éÓÚÁ½¸öÖµÖ®¼äÓжàÉټǼ(ÕâÓÉ·¶Î§ÓÅ»¯³ÌÐòÀ´¾ö¶¨Ê¹ÓÃÄĸöË÷Òý)¡£ÕâÔÚ°Ñ MyISAM ±íÀàÐ͸ÄΪ²ÉÓùþÏ£Ë÷ÒýµÄ MEMORY ÀàÐͺó¿ÉÄÜ»áÓ°ÏìһЩ²éѯ¡£

      

      
    * Ö»ÓÐÈ«²¿Ë÷Òý¼ü²ÅÄÜÓÃÓÚ¼ìË÷¼Ç¼(Èç¹ûÊÇBÊ÷Ë÷Òý£¬ÈκÎǰ׺²¿·ÖË÷ÒýÒ²ÄÜÓÃÓÚ¼ìË÷¼Ç¼)¡£




7.4.6 MyISAM Ë÷Òý»º´æ



ΪÁËÄÜ×îС»¯´ÅÅÌI/O£¬MyISAM ´æ´¢ÒýÇæ²ÉÓÃÁ˺ܶàÊý¾Ý¿âϵͳʹÓõÄÒ»ÖÖ²ßÂÔ¡£Ëü²ÉÓÃÒ»ÖÖ»úÖÆ½«×î¾­³£·ÃÎÊµÄ±í±£´æÔÚÄÚ´æÇø¿éÖУº




    * ¶ÔË÷ÒýÇø¿éÀ´Ëµ£¬Ëüά»¤×ÅÒ»¸ö½ÐË÷Òý»º´æ(Ë÷Òý»º³å)µÄ½á¹¹Ìå¡£Õâ¸ö½á¹¹ÌåÖзÅ×ÅÐí¶àÄÇЩ×ʹÓõÄË÷ÒýÇø¿éµÄ»º³åÇø¿é¡£
    * ¶ÔÊý¾ÝÇø¿éÀ´Ëµ£¬MySQLûÓÐʹÓÃÌØ¶¨µÄ»º´æ¡£ËüÒÀ¿¿²Ù×÷ϵͳµÄ±¾µØÎļþϵͳ»º´æ¡£


±¾ÕÂÊ×ÏÈÃèÊöÁË MyISAM Ë÷Òý»º´æµÄ»ù±¾²Ù×÷¡£È»ºóÌÖÂÛÔÚMySQL 4.1ÖÐËù×öµÄ¸Ä½ø£¬ËüÌá¸ßÁËË÷Òý»º´æÐÔÄÜ£¬Í¬Ê±ÄܸüºÃµØ¿ØÖÆ»º´æ²Ù×÷£º


    * Ïß³ÌÖ®¼ä²»ÔÙÊÇ´®ÐеطÃÎÊË÷Òý»º´æ¡£¶à¸öÏ߳̿ÉÒÔ²¢ÐеطÃÎÊË÷Òý»º´æ¡£
    * ¿ÉÒÔÉèÖöà¸öË÷Òý»º´æ£¬Í¬Ê±Ò²ÄÜÖ¸¶¨Êý¾Ý±íË÷Òýµ½Ìض¨µÄ»º´æÖС£



Ë÷Òý»º´æ»úÖÆ¶Ô ISAM ±íͬÑùÊÊÓᣲ»¹ý£¬ÕâÖÖÓÐЧÐÔÕýÔÚ¼õÈõ¡£×Ô´ÓMySQL 3.23¿ªÊ¼ MyISAM ±íÀàÐÍÒý½øÖ®ºó£¬ISAM ¾Í²»ÔÙ½¨ÒéʹÓÃÁË¡£MySQL 4.1¸üÊÇÑÓÐøÁËÕâ¸öÇ÷ÊÆ£¬ISAM ÀàÐÍĬÈϱ»½ûÓÃÁË¡£
¿ÉÒÔͨ¹ýϵͳ±äÁ¿ key_buffer_size À´¿ØÖÆË÷Òý»º´æÇø¿éµÄ´óС¡£Èç¹ûÕâ¸öÖµ´óСΪ0£¬ÄÇô¾Í²»Ê¹Óûº´æ¡£µ±Õâ¸öֵСµÃÓÚ²»×ãÒÔ·ÖÅäÇø¿é»º³åµÄ×îСÊýÁ¿(8)ʱ£¬Ò²²»»áʹÓûº´æ¡£
µ±Ë÷Òý»º´æÎÞ·¨²Ù×÷ʱ£¬Ë÷ÒýÎļþ¾Íֻͨ¹ý²Ù×÷ϵͳÌṩµÄ±¾µØÎļþϵͳ»º³åÀ´·ÃÎÊ(»»ÑÔÖ®£¬±íË÷ÒýÇø¿é²ÉÓõķÃÎʲßÂÔºÍÊý¾ÝÇø¿éµÄÒ»ÖÂ)¡£
Ò»¸öË÷ÒýÇø¿éÔÚ MyISAM Ë÷ÒýÎļþÖÐÊÇÒ»¸öÁ¬Ðø·ÃÎʵĵ¥Ôª¡£Í¨³£Õâ¸öË÷ÒýÇø¿éµÄ´óСºÍBÊ÷Ë÷Òý½Úµã´óСһÑù(Ë÷ÒýÔÚ´ÅÅÌÖÐÊÇÒÔBÊ÷½á¹¹À´±íʾµÄ¡£Õâ¸öÊ÷µÄµ×²¿Ê±Ò¶×ӽڵ㣬Ҷ×Ó½ÚµãÖ®ÉÏÔòÊÇ·ÇÒ¶×Ó½Úµã)¡£
ÔÚË÷Òý»º´æ½á¹¹ÖÐËùÓеÄÇø¿é´óС¶¼ÊÇÒ»ÑùµÄ¡£Õâ¸öÖµ¿ÉÄܵÈÓÚ£¬´óÓÚ£¬»òСÓÚ±íµÄË÷ÒýÇø¿é´óС¡£Í¨³£ÕâÁ½¸öÖµÊDz»Ò»ÑùµÄ¡£
µ±±ØÐë·ÃÎÊÀ´×ÔÈκαíµÄË÷ÒýÇø¿éʱ£¬·þÎñÆ÷Ê×Ïȼì²éÔÚË÷Òý»º´æÖÐÊÇ·ñÓпÉÓõĻº³åÇø¿é¡£Èç¹ûÓУ¬·þÎñÆ÷¾Í·ÃÎÊ»º´æÖеÄÊý¾Ý£¬¶ø·Ç´ÅÅÌ¡£¾ÍÊÇ˵£¬ËüÖ±½Ó´æÈ¡»º´æ£¬¶ø²»ÊÇ´æÈ¡´ÅÅÌ¡£·ñÔò£¬·þÎñÆ÷Ñ¡ÔñÒ»¸ö(¶à¸ö)°üº¬ÆäËü²»Í¬±íË÷ÒýÇø¿éµÄ»º´æ»º³åÇø¿é£¬½«ËüµÄÄÚÈÝÌæ»»³ÉÇëÇó±íµÄË÷ÒýÇø¿éµÄ¿½±´¡£Ò»µ©ÐµÄË÷ÒýÇø¿éÔÚ»º´æÖÐÁË£¬Ë÷ÒýÊý¾Ý¾Í¿ÉÒÔ´æÈ¡ÁË¡£
µ±·¢Éú±»Ñ¡ÖÐÒªÌæ»»µÄÇø¿éÄÚÈÝÐÞ¸ÄÁ˵ÄÇé¿öʱ£¬Õâ¸öÇø¿é¾Í±»ÈÏΪ'Ôà'ÁË¡£ÄÇô£¬ÔÚÌæ»»Ö®Ç°£¬ËüµÄÄÚÈݾͱØÐëÏÈˢе½ËüÖ¸ÏòµÄ±êË÷Òý¡£
ͨ³£·þÎñÆ÷×ñÑ­LRU(×î½ü×îÉÙʹÓÃ)²ßÂÔ£ºµ±ÒªÑ¡ÔñÌæ»»µÄÇø¿éʱ£¬ËüÑ¡Ôñ×î½ü×îÉÙʹÓõÄË÷ÒýÇø¿é¡£ÎªÁËÏëÒªÈÃÑ¡Ôñ±äµÃ¸üÈÝÒ×£¬Ë÷Òý»º´æÄ£¿é»áά»¤Ò»¸ö°üº¬ËùÓÐʹÓÃÇø¿éÌØ±ðµÄ¶ÓÁÐ(LRUÁ´)¡£µ±Ò»¸öÇø¿é±»·ÃÎÊÁË£¬¾Í°ÑËü·Åµ½¶ÓÁеÄ×îºóλÖᣵ±Çø¿éÒª±»Ì滻ʱ£¬ÔÚ¶ÓÁпªÊ¼Î»ÖõÄÇø¿é¾ÍÊÇ×î½ü×îÉÙʹÓõģ¬Ëü¾ÍÊǵÚÒ»ºòѡɾ³ý¶ÔÏó¡£

7.4.6.1 ¹²Ïí·ÃÎÊË÷Òý»º´æ



ÔÚMySQL 4.1ÒÔǰ£¬·ÃÎÊË÷Òý»º´æÊÇ´®ÐеģºÁ½¸öÏ̲߳»Äܲ¢ÐеطÃÎÊË÷Òý»º´æ»º³å¡£·þÎñÆ÷´¦ÀíÒ»¸ö·ÃÎÊË÷ÒýÇø¿éµÄÇëÇóÖ»ÄܵÈËü֮ǰµÄÇëÇó´¦ÀíÍê¡£½á¹û£¬ÐµÄÇëÇóËùÐèµÄË÷ÒýÇø¿é¾Í²»ÔÚÈκÎË÷Òý»º´æ»·³åÇø¿éÖУ¬ÒòΪÆäËûḬ̈߳Ѱüº¬Õâ¸öË÷ÒýÇø¿éµÄ»º³å¸ø¸üÐÂÁË¡£

´ÓMySQL 4.1.0¿ªÊ¼£¬·þÎñÆ÷Ö§³Ö¹²Ïí·½Ê½·ÃÎÊË÷Òý»º´æ£º

    * ûÓÐÕýÔÚ±»¸üÐµĻº³å¿ÉÒÔ±»¶à¸öÏ̷߳ÃÎÊ¡£

      

      
    * »º³åÕý±»¸üÐÂʱ£¬ÐèҪʹÓÃÕâ¸ö»º³åµÄÏß³ÌÖ»Äܵȵ½¸üÐÂÍê³ÉÖ®ºó¡£

      

      
    * ¶à¸öÏ߳̿ÉÒÔ³õʼ»¯ÐèÒªÌæ»»»º´æÇø¿éµÄÇëÇó£¬Ö»ÒªËüÃDz»¸ÉÈűðµÄÏß³Ì(Ò²¾ÍÊÇ£¬ËüÃÇÇëÇó²»Í¬µÄË÷ÒýÇø¿é£¬Òò´Ë²»Í¬µÄ»º´æÇø¿é±»Ìæ»»)¡£



¹²Ïí·½Ê½·ÃÎÊË÷Òý»º´æÁî·þÎñÆ÷Ã÷ÏÔ¸ÄÉÆÁËÍÌÍÂÁ¿¡£
7.4.6.2 ¶àÖØË÷Òý»º´æ





¹²Ïí·ÃÎÊË÷Òý»º´æ¸ÄÉÆÁËÐÔÄÜ£¬È´²»ÄÜÍêÈ«Ïû³ýÏ̼߳äµÄ³åÍ»¡£ËüÃÇÈÔÈ»ÕùÇÀ¿ØÖƹÜÀí´æÈ¡Ë÷Òý»º´æ»º³åµÄ½á¹¹¡£ÎªÁ˸ü½øÒ»²½¼õÉÙË÷Òý»º´æ´æÈ¡³åÍ»£¬MySQL 4.1.1ÌṩÁ˶àÖØË÷Òý»º´æÌØÐÔ¡£ÕâÄܽ«²»Í¬µÄ±íË÷ÒýÖ¸¶¨µ½²»Í¬µÄË÷Òý»º´æ¡£
µ±Óжà¸öË÷Òý»º´æ£¬·þÎñÆ÷ÔÚ´¦ÀíÖ¸¶¨µÄ MyISAM ±í²éѯʱ±ØÐëÖªµÀ¸ÃʹÓÃÄĸö¡£Ä¬Èϵأ¬ËùÓÐµÄ MyISAM ±íË÷Òý¶¼»º´æÔÚĬÈϵÄË÷Òý»º´æÖС£ÏëÒªÖ¸¶¨µ½Ìض¨µÄ»º´æÖУ¬¿ÉÒÔʹÓà CACHE INDEX Óï¾ä¡£
ÈçÏÂÓï¾äËùʾ£¬Ö¸¶¨±íµÄË÷ t1, t2 ºÍ t3 Òý»º´æµ½ÃûΪ hot_cache µÄ»º´æÖУº



mysql> CACHE INDEX t1, t2, t3 IN hot_cache;+---------+--------------------+----------+----------+| Table   | Op                 | Msg_type | Msg_text |+---------+--------------------+----------+----------+| test.t1 | assign_to_keycache | status   | OK       || test.t2 | assign_to_keycache | status   | OK       || test.t3 | assign_to_keycache | status   | OK       |+---------+--------------------+----------+----------+

×¢Ò⣬Èç¹û·þÎñÆ÷±àÒëÖ§³Ö´æ ISAM ´¢ÒýÇæÁË£¬ÄÇô ISAM ±íҲʹÓÃË÷Òý»º´æ»úÖÆ¡£²»¹ý£¬ISAM ±íË÷ÒýÖ»ÄÜʹÓÃĬÈϵÄË÷Òý»º´æ¶ø²»ÄÜ×Ô¶¨Òå¡£
CACHE INDEX Óï¾äÖÐÓõ½µÄË÷Òý»º´æÊǸù¾ÝÓà SET GLOBAL Óï¾äµÄ²ÎÊýÉ趨µÄÖµ»òÕß·þÎñÆ÷Æô¶¯²ÎÊýÖ¸¶¨µÄÖµ´´½¨µÄ£¬ÈçÏ£º

mysql> SET GLOBAL keycache1.key_buffer_size=128*1024;



ÏëҪɾ³ýË÷Òý»º´æ£¬Ö»ÐèÉèÖÃËüµÄ´óСΪ0£º



mysql> SET GLOBAL keycache1.key_buffer_size=0;

Ë÷Òý»º´æ±äÁ¿ÊÇÒ»¸ö½á¹¹Ìå±äÁ¿£¬ÓÉÃû×ÖºÍ×é¼þ¹¹³É¡£ÀýÈç keycache1.key_buffer_size£¬ keycache1 ¾ÍÊÇ»º´æÃû£¬key_buffer_size ÊÇ»º´æ×é¼þ¡£ÏêÇéÇë¿´"10.4.1 Structured System Variables"£¬ËüÃèÊöÁ˹¹ÔìË÷Òý»º´æÏµÍ³±äÁ¿µÄʹÓÃÓï·¨¡£
ĬÈϵأ¬±íË÷ÒýÔÚ·þÎñÆ÷Æô¶¯Ê±Ö¸¶¨µ½Ö÷(ĬÈϵÄ)Ë÷Òý»º´æÖС£µ±Ò»¸öË÷Òý»º´æ±»É¾µôºó£¬Ö¸¶¨µ½Õâ¸ö»º´æµÄËùÓÐË÷Òý¶¼±»ÖØÐÂÖ¸Ïòµ½ÁËĬÈÏË÷Òý»º´æÖÐÈ¥¡£
¶ÔÒ»¸ö·±Ã¦µÄϵͳÀ´Ëµ£¬ÎÒÃǽ¨ÒéÒÔÏÂÈýÌõ²ßÂÔÀ´Ê¹ÓÃË÷Òý»º´æ£º


    * ÈÈ»º´æÕ¼ÓÃ20%µÄ×Ü»º´æ¿Õ¼ä¡£ÓÃÓÚ·±ÖØËÑË÷µ«ºÜÉÙ¸üÐÂµÄ±í¡£
    * À仺´æÕ¼ÓÃ20%µÄ×Ü»º´æ¿Õ¼ä¡£ÓÃÓÚÖеÈÇ¿¶È¸üÐÂµÄ±í£¬ÈçÁÙʱ±í¡£
    * À仺´æÕ¼ÓÃ60%µÄ×Ü»º´æ¿Õ¼ä¡£×÷ΪĬÈϵĻº´æ£¬ÓÃÓÚËùÓÐÆäËû±í¡£



ʹÓÃÈý¸ö»º´æµÄÒ»¸öÔ­ÒòÊǺô¦ÔÚÓÚ£¬´æÈ¡Ò»¸ö»º´æ½á¹¹Ê±²»»á×èÖ¹¶ÔÆäËû»º´æµÄ·ÃÎÊ¡£·ÃÎÊÒ»¸ö±íË÷ÒýµÄ²éѯ²»»á¸úÖ¸¶¨µ½ÆäËû»º´æµÄ²éѯ¾ºÕù¡£ÐÔÄÜÌá¸ß»¹±íÏÖÔÚÒÔϼ¸µãÔ­Òò£º


    * ÈÈ»º´æÖ»ÓÃÓÚ¼ìË÷¼Ç¼£¬Òò´ËËüµÄÄÚÈÝ×ÜÊDz»ÐèÒª±ä»¯¡£ËùÒÔ£¬ÎÞÂÛʲôʱºòÒ»¸öË÷ÒýÇø¿éÐèÒª´Ó´ÅÅÌÖÐÒýÈ룬±»Ñ¡ÖÐÒªÌæ»»µÄ»º´æÇø¿éµÄÄÚÈÝ×ÜÊÇÒªÏȱ»Ë¢Ð¡£
    * Ë÷Òý±»Ö¸ÏòÈÈ»º´æÖкó£¬Èç¹ûûÓÐÐèҪɨÃèÈ«²¿Ë÷ÒýµÄ²éѯ£¬ÄÇô¶ÔÓ¦µ½BÊ÷ÖзÇÒ¶×Ó½ÚµãµÄË÷ÒýÇø¿é¼«¿ÉÄÜ»¹±£ÁôÔÚ»º´æÖС£
    * ÔÚÁÙʱ±íÀï±ØÐëÆµ·±Ö´ÐÐÒ»¸ö¸üвÙ×÷ÊÇÏ൱¿ìµÄ£¬Èç¹ûÒª±»¸üеĽڵãÒѾ­ÔÚ»º´æÖÐÁË£¬ËüÎÞÐèÏÈ´Ó´ÅÅÌÖжÁÈ¡³öÀ´¡£µ±ÁÙʱ±íµÄË÷Òý´óСºÍÀ仺´æ´óСһÑùʱ£¬ÄÇôÔÚÐèÒª¸üÐÂÒ»¸ö½ÚµãʱËüÒѾ­ÔÚ»º´æÖдæÔڵļ¸ÂÊÊÇÏ൱¸ßµÄ¡£

ÒúÉú ·¢±íÓÚ 2007-11-16 13:29

7.4.6.3 Öеã²åÈë²ßÂÔ





ĬÈϵأ¬MySQL 4.1µÄË÷Òý»º´æ¹ÜÀíϵͳ²ÉÓÃLRU²ßÂÔÀ´Ñ¡ÔñÒª±»Çå³ýµÄ»º´æÇø¿é£¬²»¹ýËüÒ²Ö§³Ö¸üÍêÉÆµÄ·½·¨£¬½Ð×ö"Öеã²åÈë²ßÂÔ"¡£



ʹÓÃÖеã²åÈë²ßÂÔʱ£¬LRUÁ´¾Í±»·Ö¸î³ÉÁ½°ë£ºÒ»¸öÈÈ×ÓÁ´£¬Ò»¸öÎÂ×ÓÁ´¡£Á½°ë·Ö¸îµÄµã²»Êǹ̶¨µÄ£¬²»¹ý»º´æ¹ÜÀíϵͳ»á×¢Òâ²»ÈÃÎÂ×ÓÁ´²¿·Ö"Ì«¶Ì"£¬×ÜÊÇÖÁÉÙ°üÀ¨È«²¿»º´æÇø¿éµÄ key_cache_division_limit ±ÈÂÊ¡£key_cache_division_limit ÊÇ»º´æ½á¹¹Ìå±äÁ¿µÄ×é¼þ²¿·Ö£¬Òò´ËËüÊÇÿ¸ö»º´æ¶¼¿ÉÒÔÉèÖÃÕâ¸ö²ÎÊýÖµ¡£

µ±Ò»¸öË÷ÒýÇø¿é´Ó±íÖжÁÈ뻺´æÊ±£¬ËüÊ×ÏÈ·ÅÔÚÎÂ×ÓÁ´µÄĩβ¡£µ±´ïµ½Ò»¶¨µÄµã»÷ÂÊ(·ÃÎÊÕâ¸öÇø¿é)ºó£¬Ëü¾ÍÌáÉýµ½ÈÈ×ÓÁ´ÖÐÈ¥¡£Ä¿Ç°£¬ÒªÌáÉýÒ»¸öÇø¿éµÄµã»÷ÂÊ (3)¶Ôÿ¸öÇø¿éÀ´Ëµ¶¼ÊÇÒ»ÑùµÄ¡£½«À´£¬ÎÒÃÇ»áÈõã»÷ÂÊÒÀ¿¿BÊ÷ÖжÔÓ¦µÄË÷ÒýÇø¿é½ÚµãµÄ¼¶±ð£º°üº¬·ÇÒ¶×Ó½ÚµãµÄË÷ÒýÇø¿éËùÒªÇóµÄÌáÉýµã»÷Âʾ͵ÍÒ»µã£¬°üº¬Ò¶×Ó½ÚµãµÄBË÷ÒýÊ÷µÄÇø¿éµÄÖµ¾Í¸ßµã¡£

ÌáÉýÆðÀ´µÄÇø¿éÊ×ÏÈ·ÅÔÚÈÈ×ÓÁ´µÄĩβ¡£Õâ¸öÇø¿éÔÚÈÈ×ÓÁ´ÄÚһֱѭ»·¡£Èç¹ûÕâ¸öÇø¿éÔÚ¸Ã×ÓÁ´¿ªÍ·Î»ÖÃÍ£Áôʱ¼ä×ã¹»³¤ÁË£¬Ëü¾Í»á±»½µ¼¶»ØÎÂ×ÓÁ´¡£Õâ¸öʱ¼äÊÇÓÉË÷Òý»º´æ½á¹¹Ìå±äÁ¿µÄ×é¼þ key_cache_age_threshold ÖµÀ´¾ö¶¨µÄ¡£

Õâ¸ö·§ÖµÊÇÕâôÃèÊöµÄ£¬Ò»¸öË÷Òý»º´æ°üº¬ÁË N ¸öÇø¿é£¬ÈÈ×ÓÁ´¿ªÍ·µÄÇø¿éÔÚµÍÓÚ N*key_cache_age_threshold/100 ´Î·ÃÎʺó¾Í±»Òƶ¯µ½ÎÂ×ÓÁ´µÄ¿ªÍ·Î»Öá£ËüÓÖÊ×ÏȳÉΪ±»É¾³ýµÄºòÑ¡¶ÔÏó£¬ÒòΪҪ±»Ìæ»»µÄÇø¿é»¹ÊÇ´ÓÎÂ×ÓÁ´µÄ¿ªÍ·Î»ÖÿªÊ¼µÄ¡£

Öеã²åÈë²ßÂÔ¾ÍÄÜÔÚ»º´æÖÐ×ÜÄܱ£³Ö¸üÓмÛÖµµÄÇø¿é¡£Èç¹û¸üϲ»¶²ÉÓÃLRU²ßÂÔ£¬Ö»ÐèÈà key_cache_division_limit µÄÖµµÍÓÚĬÈÏÖµ 100¡£

Öеã²åÈë²ßÂÔÄܰïÖú¸ÄÉÆÔÚÖ´ÐÐÐèÒªÓÐЧɨÃèË÷Òý£¬Ëü»á½«ËùÓжÔÓ¦µ½BÊ÷Öи߼¶±ðµÄÓмÛÖµµÄ½ÚµãÍÆ³öµÄ²éѯʱµÄÐÔÄÜ¡£ÎªÁ˱ÜÃâÕâÑù£¬¾Í±ØÐëÉ趨 key_cache_division_limit Ô¶Ô¶µÍÓÚ100ÒÔ²ÉÓÃÖеã²åÈë²ßÂÔ¡£ÔòÔÚɨÃèË÷Òý²Ù×÷ʱÄÇЩÓмÛÖµµÄƵ·±µã»÷µÄ½Úµã¾Í»á±£ÁôÔÚÈÈ×ÓÁ´ÖÐÁË¡£

7.4.6.4 Ë÷ÒýÔ¤ÔØÈë





Èç¹ûË÷Òý»º´æÖÐÓÐ×ã¹»µÄÇø¿éÓÃÀ´±£´æÈ«²¿Ë÷Òý£¬»òÕßÖÁÉÙ×ã¹»±£´æÈ«²¿·ÇÒ¶×ӽڵ㣬ÄÇôÔÚʹÓÃǰ¾ÍÔØÈëË÷Òý»º´æ¾ÍºÜÓÐÒâÒåÁË¡£½«Ë÷ÒýÇø¿éÒÔÊ®·ÖÓÐЧµÄ·½·¨Ô¤ÔØÈëË÷Òý»º´æ»º³å£º´Ó´ÅÅÌÖÐ˳ÐòµØ¶ÁÈ¡Ë÷ÒýÇø¿é¡£

ûÓÐÔ¤ÔØÈ룬²éѯËùÐèµÄË÷ÒýÇø¿éÈÔÈ»ÐèÒª±»·Åµ½»º´æÖÐÈ¥¡£ËäÈ»Ë÷ÒýÇø¿éÒª±£ÁôÔÚ»º´æÖУ¬ÒòΪÓÐ×ã¹»µÄ»º³å£¬ËüÃÇ¿ÉÒÔ´Ó´ÅÅÌÖÐËæ»ú¶ÁÈ¡µ½£¬¶ø·Ç˳ÐòµØ¡£

ÏëÒªÔ¤ÔØÈ뻺´æ£¬¿ÉÒÔʹÓà LOAD INDEX INTO CACHE Óï¾ä¡£ÈçÏÂÓï¾äÔ¤ÔØÈëÁ˱í t1 ºÍ t2 µÄË÷Òý½Úµã(Çø¿é)£º



mysql> LOAD INDEX INTO CACHE t1, t2 IGNORE LEAVES;+---------+--------------+----------+----------+| Table   | Op           | Msg_type | Msg_text |+---------+--------------+----------+----------+| test.t1 | preload_keys | status   | OK       || test.t2 | preload_keys | status   | OK       |+---------+--------------+----------+----------+



Ôö¼ÓÐÞÊÎÓï IGNORE LEAVES ¾ÍÖ»Ô¤ÔØÈë·ÇÒ¶×Ó½ÚµãµÄË÷ÒýÇø¿é¡£Òò´Ë£¬ÉÏÊöÓï¾ä¼ÓÔØÁË t1 µÄÈ«²¿Ë÷ÒýÇø¿é£¬µ«ÊÇÖ»¼ÓÔØ t2 µÄ·ÇÒ¶×Ó½ÚµãÇø¿é¡£

Èç¹ûʹÓà CACHE INDEX Óï¾ä½«Ë÷ÒýÖ¸ÏòÒ»¸öË÷Òý»º´æ£¬½«Ë÷ÒýÇø¿éÔ¤Ïȷŵ½ÄǸö»º´æÖÐÈ¥¡£·ñÔò£¬Ë÷ÒýÇø¿éÖ»»á¼ÓÔØµ½Ä¬ÈϵĻº´æÖÐÈ¥¡£

7.4.6.5 Ë÷Òý»º´æ´óС





MySQL 4.1Òý½øÁ˶Ôÿ¸öË÷Òý»º´æµÄбäÁ¿ key_cache_block_size¡£Õâ¸ö±äÁ¿¿ÉÒÔÖ¸¶¨Ã¿¸öË÷Òý»º´æµÄÇø¿é´óС¡£ÓÃËü¾Í¿ÉÒÔÀ´µ÷ÕûË÷ÒýÎļþI/O²Ù×÷µÄÐÔÄÜ¡£

µ±¶Á»º³åµÄ´óСºÍ±¾µØ²Ù×÷ϵͳµÄI/O»º³å´óСһÑùʱ£¬¾Í´ïµ½ÁËI/O²Ù×÷µÄ×î¸ßÐÔÄÜÁË¡£µ«ÊÇÉèÖÃË÷Òý½ÚµãµÄ´óСºÍI/O»º³å´óСһÑùδ±ØÄÜ´ïµ½×îºÃµÄ×ÜÌåÐÔÄÜ¡£¶Á±È½Ï´óµÄÒ¶×Ó½Úµãʱ£¬·þÎñÆ÷»á¶Á½øÀ´ºÜ¶à²»±ØÒªµÄÊý¾Ý£¬Õâ´ó´ó×è°­Á˶ÁÆäËûÒ¶×ӽڵ㡣

Ŀǰ£¬»¹²»ÄÜ¿ØÖÆÊý¾Ý±íµÄË÷ÒýÇø¿é´óС¡£Õâ¸ö´óСÔÚ·þÎñÆ÷´´½¨Ë÷ÒýÎļþ `.MYI' ʱÒѾ­É趨ºÃÁË£¬Ëü¸ù¾ÝÊý¾Ý±íµÄË÷Òý´óСµÄ¶¨Òå¶ø¶¨¡£Ôںܶàʱºò£¬ËüÉèÖóɺÍI/O»º³å´óСһÑù¡£ÔÚ½«À´£¬¿ÉÒԸıäËüµÄÖµ£¬²¢ÇÒ»áÈ«Ãæ²ÉÓñäÁ¿ key_cache_block_size¡£

7.4.6.6 ÖØ½¨Ë÷Òý»º´æ





Ë÷Òý»º´æ¿ÉÒÔͨ¹ýÐÞ¸ÄÆä²ÎÊýÖµÔÚÈκÎʱºòÖØ½¨Ëü£¬ÀýÈ磺



mysql> SET GLOBAL cold_cache.key_buffer_size=4*1024*1024;



Èç¹ûÉ趨Ë÷Òý»º´æµÄ½á¹¹Ìå±äÁ¿×é¼þ±äÁ¿ key_buffer_size »ò key_cache_block_size ÈκÎÒ»¸öµÄÖµºÍËüµ±Ç°µÄÖµ²»Ò»Ñù£¬·þÎñÆ÷¾Í»áÇå¿ÕÔ­À´µÄ»º´æ£¬ÔÚеıäÁ¿Öµ»ù´¡ÉÏÖØ½¨»º´æ¡£Èç¹û»º´æÖÐÓÐÈκεÄ'Ôà'Ë÷Òý¿é£¬·þÎñÆ÷»áÏȰÑËüÃDZ£´æÆðÀ´È»ºó²ÅÖØ½¨»º´æ¡£ÖØÐÂÉ趨ÆäËûµÄË÷Òý»º´æ±äÁ¿²¢²»»áÖØ½¨»º´æ¡£

ÖØ½¨»º´æÊ±£¬·þÎñÆ÷»á°ÑËùÓеÄ'Ôà'»º³åµÄÄÚÈÝÏÈˢе½´ÅÅÌÖÐÈ¥¡£Ö®ºó£¬»º´æµÄÄÚÈݾÍÎÞЧÁË¡£²»¹ý£¬Öؽ¨µÄʱºò²¢²»×èÖ¹ÄÇЩÐèҪʹÓÃÖ¸Ïòµ½»º´æÖеÄË÷ÒýµÄ²éѯ¡£Ïà·´µØ£¬·þÎñÆ÷ʹÓñ¾µØÎļþϵͳ»º´æÖ±½Ó·ÃÎÊÊý¾Ý±íË÷Òý¡£Îļþϵͳ»º´æ²»ÈçË÷Òý»º´æÀ´µÄ¸ßЧ£¬Òò´Ë£¬¿ÉÒÔÔ¤¼ûÕâʱµÄ²éѯ»á±È½ÏÂý¡£Ò»µ©»º´æÖؽ¨ÍêÁË£¬Ö¸ÏòËüµÄË÷ÒýÓÖ¿ÉÒÔʹÓÃÁË£¬Í¬Ê±Ò²¾Í²»ÔÙʹÓÃÎļþϵͳ»º´æÀ´·ÃÎÊË÷ÒýÁË¡£

7.4.7 MySQL ÈçºÎͳ¼Æ´ò¿ªµÄ±íÊýÁ¿





Ö´ÐÐÃüÁî mysqladmin status ʱ£¬¿ÉÒÔ¿´µ½ÀàËÆÈçϽá¹û£º



Uptime: 426 Running threads: 1 Questions: 11082Reloads: 1 Open tables: 12



Èç¹ûÖ»ÓÐ6¸öÊý¾Ý±íʱ£¬Open tables µÄֵȷʵ12£¬Õâ¿ÉÄÜ»áÓÐЩÒÉ»ó¡£

MySQLÊǶàÏ̵߳ģ¬Òò´Ë¿ÉÄÜ»áÓжà¸ö¿Í»§¶Ëͬʱ·¢Æð²éѯij¸ö±íµÄÇëÇó¡£ÎªÁË×îС»¯¶à¸ö¿Í»§¶ËÏß³ÌÔÚͬһ¸ö±íÉϵIJ»Í¬×´Ì¬£¬Õë¶Ôÿ¸ö²¢·¢µÄÏ̵߳¥¶À´ò¿ªÊý¾Ý±í¡£Õâ»áÕ¼ÓÃһЩÄڴ棬µ«ÊÇͨ³£»áÌá¸ßÐÔÄÜ¡£Èç¹ûÊÇ MyISAM ±í£¬Õë¶Ôÿ¸ö´ò¿ªÊý¾Ý±íµÄ¿Í»§¶Ë¶¼ÒªÓÐÒ»¸ö¶îÍâµÄÎļþÃèÊö·û´ò¿ªÊý¾ÝÎļþµÄÇé¿ö(²»¹ýË÷ÒýÎļþµÄÃèÊö·ûÔò¿ÉÒÔÔÚËùÓеÄÏ̼߳乲Ïí)¡£ISAM ´æ´¢ÒýÇæÔò¹²ÏíÕâЩ²Ù×÷¡£

ÏëÒªÁ˽â¸ü¶à£¬¿ÉÒÔ¿´ÏÂÒ»ÕµÄÏêϸÄÚÈÝ"7.4.8 How MySQL Opens and Closes Tables"¡£

7.4.8 MySQL ÈçºÎ´ò¿ªºÍ¹Ø±ÕÊý¾Ý±í





ϵͳ±äÁ¿ table_cache, max_connections ºÍ max_tmp_tables Ó°Ïì×Å·þÎñÆ÷±£³Ö´ò¿ªµÄÎļþ×î´óÊýÁ¿¡£Ìá¸ßÒ»¸ö»ò¶à¸öÕâЩ±äÁ¿£¬¾Í¿ÉÒÔÌá¸ß²Ù×÷ϵͳÔÚÿ´Î´¦ÀíʱÄÜ´ò¿ªµÄÎļþÃèÊö·ûÏÞÖÆ¡£ºÜ¶à²Ù×÷ϵͳ¶¼¿ÉÒÔÔö¼ÓÎļþ´ò¿ªµÄÊýÁ¿ÏÞÖÆ£¬²»¹ýÿ¸öϵͳµÄ·½·¨¶¼¸÷²»Ò»Ñù¡£²éÔÄһϲÙ×÷ϵͳÎĵµÀ´ÅжÏÊÇ·ñ¿ÉÒÔÌá¸ßÏÞÖÆÒÔ¼°Ôõôȥ×ö¡£

table_cache ºÍ max_connections Ïà¹Ø¡£ÀýÈ磬ÓÐ200¸ö²¢·¢µÄÁ¬½Ó£¬ÄÇôÔò±ØÐëÖÁÉÙÓÐ 200 * N ´óСµÄ±í»º´æ£¬N ÊÇÔÚÒ»¸ö±íÁ¬½ÓÖÐ×î´óµÄ±íÊýÁ¿¡£Í¬Ê±Ò²ÐèҪΪÁÙʱ±íºÍÁÙʱÎļþ±£ÁôһЩ¶îÍâµÄÎļþÃèÊö·û¡£

ÇëÈ·ÈϲÙ×÷ϵͳ¿ÉÒÔͨ¹ýÉ趨 table_cache À´´¦Àí¶ÔÓ¦ÊýÁ¿µÄ´ò¿ªÎļþ¡£Èç¹û table_cache ÉèµÃÌ«¸ßÁË£¬MySQL¿ÉÄÜ»áÓÃÍêÈ«²¿µÄÎļþÃèÊö·û¶ø¾Ü¾øÐÂÁ¬½Ó£¬¾ÍÎÞ·¨Ö´Ðвéѯ£¬±äµÃºÜ²»¿É¿¿¡£Òò´Ë±ØÐëÒª¿¼Âǵ½ MyISAM ´æ´¢ÒýÇæÒªÎªÃ¿¸ö¶ÀÁ¢´ò¿ªµÄ±íʹÓÃÁ½¸öÎļþÃèÊö·û¡£¿ÉÒÔÔÚÆô¶¯ mysqld_safe µÄʱºòÔö¼Ó --open-files-limit ²ÎÊýÀ´Ìá¸ßMySQL´ò¿ªÎļþÃèÊö·ûµÄÊýÁ¿¡£ÏêÇéÇë¿´"A.2.17 File Not Found".

»º´æÖлᱣ´æ table_cache ¸ö´ò¿ªµÄ±í»á¡£ËüµÄĬÈÏÖµÊÇ64£»Ëü¿ÉÒÔÔÚÆô¶¯ mysqld µÄʱºòͨ¹ýÐÞ¸Ä --table_cache ²ÎÊýÀ´¸Ä±ä¡£×¢Ò⣬MySQL¿ÉÄÜ»áÁÙʱ´ò¿ª±ÈÕâ¸öÊý¸ü¶àµÄ±íÀ´Ö´Ðвéѯ¡£

ÔÚÒÔÏÂÇé¿öÖУ¬Ò»¸ö²»Óõıí»á±»¹Ø±Õ²¢ÇÒ´Ó»º´æÖб»É¾³ý£º

    * Èç¹û»º´æÂúÁË£¬²¢ÇÒÒ»¸öÏß³ÌÊÔͼ´ò¿ªÒ»¸ö²»ÔÚ»º´æÖÐµÄ±í¡£

      

      
    * Èç¹û»º´æÖÐÒѾ­°üº¬Á˲»Ö¹ table_cache ¸ö±íÄ¿£¬²¢ÇÒÏß³ÌÎÞÐèÔÙʹÓÃ¸Ã±í¡£

      

      
    * µ±·¢Éúˢбí²Ù×÷¡£µ±Ìá½»Ò»¸ö
      FLUSH TABLES Óï¾ä»òÕßÖ´ÐÐ mysqladmin flush-tables or mysqladmin refresh ÃüÁîʱ¾Í»áÕâÑù¡£



µ±±í»º´æÂúÁË£¬·þÎñÆ÷×ñÑ­ÒÔϲ½ÖèÀ´·ÖÅäÒ»¸öÐµĻº´æ±íÄ¿£º

    * µ±Ç°Ã»Ê¹ÓÃµÄ±í¶¼ÊÍ·Å£¬ÒÀÕÕ×î½ü×îÉÙʹÓõÄ˳Ðò¡£

      

      
    * Èç¹ûÓÐÒ»¸öеıíÒª±»´ò¿ª£¬µ«ÊÇ»º´æÂúÁËÇÒûÓÐ±í±»ÊÍ·Å£¬»º´æ¾ÍÁÙʱ¸ù¾ÝÐèÒªÀ©³äһϡ£





µ±»º´æ´¦ÓÚÁÙʱÀ©³ä״̬£¬ÇÒÓÐ±í´¦ÓÚ´ÓʹÓñä³É²»Ê¹ÓÃ״̬ʱ£¬¾Í¹Ø±ÕÕâ¸ö±í²¢ÇÒ´Ó»º´æÖÐÊÍ·Å¡£

ÿ¸ö²¢ÐзÃÎʶ¼´ò¿ªÒ»¸ö±í¡£ÕâÒâζ×ŵ±ÓÐÁ½¸öÏß³Ìͬʱ·ÃÎÊÒ»¸ö±í£¬»òÕßÒ»¸öÏß³ÌÔÚͬһ¸ö²éѯÖзÃÎÊÁ½´ÎÕâ¸ö±í(ÀýÈ磬ÔÚ±íÁ¬½ÓÖÐÁ¬½Ó×Ô¼º)£¬ÄÇôÕâ¸ö±í¾ÍÐèÒª±»´ò¿ªÁ½´Î¡£Ã¿´Î²¢·¢µÄ´ò¿ª¶¼ÔÚ±í»º´æÖÐÇëÇóÒ»¸ö±íÄ¿¡£Ã¿¸ö±íµÚÒ»´Î´ò¿ªÊ±¶¼ÐèÒªÁ½¸öÎļþÃèÊö·û£ºÒ»¸ö¸øÊý¾ÝÎļþ£¬Ò»¸ö¸øË÷ÒýÎļþ¡£ÆäËûÐÂÔöµÄ¶Ô¸Ã±íµÄ´ò¿ªÔòÖ»ÐèÒªÒ»¸öÎļþ£¬¸øÊý¾ÝÎļþ¡£Ë÷ÒýÎļþµÄÃèÊö·ûÔÚËùÓеÄÏ̼߳äÊǹ²ÏíµÄ¡£

Èç¹ûʹÓà HANDLER tbl_name OPEN Óï¾ä´ò¿ª±í£¬ÔòÓÐÒ»¸öרÓõıí¶ÔÏó¸ø¸ÃÏ̡߳£Õâ¸ö±í¶ÔÏó²»ºÍÆäËûÏ̹߳²Ïí£¬²¢ÇÒ³ý·Çµ÷Óà HANDLER tbl_name CLOSE Óï¾ä»òÕßÏ߳̽áÊø£¬·ñÔòËü²»»á¹Ø±Õ£»ÕâÑùµÄ»°£¬Ëü¾ÍÖØÐ·ŻرíË÷ÒýÖÐ(Èç¹ûË÷Òý»¹Î´Âú)¡£ÏêÇéÇë¿´"14.1.3 HANDLER Syntax"¡£

¿ÉÒÔ¼ì²é
mysqld µÄ״̬±äÁ¿ Opened_tables À´ÅжϱíË÷ÒýÊÇ·ñ̫СÁË£º



mysql> SHOW STATUS LIKE 'Opened_tables';+---------------+-------+| Variable_name | Value |+---------------+-------+| Opened_tables | 2741  |+---------------+-------+



Èç¹ûÕâ¸öÖµ±È½Ï´ó£¬²»¹ýÍêȫû±ØÒªÖ´ÐÐÒ»´ó¶ÑµÄ FLUSH
TABLES Óï¾ä¡£Ö»Ðè¼Ó´ó±íË÷Òý»º´æ´óС¼´¿É¡£ÏêÇéÇë¿´"5.2.3 Server System Variables"ºÍ"5.2.4 Server Status Variables"¡£

7.4.9 ÔÚһЩÊý¾Ý¿âÖд´½¨Ì«¶à±íµÄȱµã





Èç¹ûÔÚÒ»¸öĿ¼ÏÂÓкܶàµÄ MyISAM »ò ISAM ±í£¬´ò¿ª£¬¹Ø±Õ£¬´´½¨µÈ²Ù×÷¾Í»á±äÂý¡£Èç¹ûÔںܶ಻ͬµÄ±íÉÏÖ´ÐÐ
Select Óï¾ä£¬µ±±í»º´æÂúÁËÖ®ºóÕâ¾Í»áÓÐЩ¿ªÏú£¬ÒòΪÿ¸ö±í¶¼ÐèÒª±»´ò¿ª£¬ÆäËûµÄ±ØÐë¹Ø±Õ¡£¿ÉÒÔ¼Ó´ó±í»º´æÀ´½µµÍÕâ¸ö¿ªÏú¡£

ÒúÉú ·¢±íÓÚ 2007-11-16 13:29

7.5 ÓÅ»¯ MySQL ·þÎñÆ÷




7.5.1 µ÷ÕûϵͳÒòËØ¼°Æô¶¯²ÎÊý





ÎÒÃÇ´Óϵͳ¼¶±ðµÄÒòËØ¿ªÊ¼ËµÆð£¬ÒòΪÓÐЩ·½ÃæµÄÒòËØ±ØÐ뾡Ôç¾ö¶¨²ÅÄÜÈ¡µÃ½Ï´óÐÔÄܸĽø¡£ÆäËûÇé¿öÏ£¬Ö»ÐèÒª¿ìËÙ¿´Ò»Ï±¾Õ½ڼ´¿É¡£²»¹ý£¬ÔÚÕâ¸ö¼¶±ð¿´¿´ÄÜ×öʲôÒÔÈ¡µÃ¸ü¸ßÐÔÄܸüºÏÊÊ¡£
ʹÓÃĬÈϵIJÙ×÷ϵͳÕâºÜÖØÒª¡£ÏëÒª×îÓÐЧµØÊ¹ÓöàCPU»úÆ÷£¬¾ÍʹÓÃSolaris(ÒòΪËüµÄÏß³ÌʵÏÖȷʵºÜºÃ)»òLinux(ÒòΪ2.2µÄÄں˶ÔSMPÓÐÁ¼ºÃµÄÖ§³Ö)¡£Çë×¢Ò⣬Àϰ汾µÄLinuxÄÚºËĬÈÏ»áÓÐ2GBÎļþ´óСÏÞÖÆ¡£Èç¹ûʹÓÃÕâÑùµÄÄں˶øÎļþÓÖȷʵÐèÒª´óÓÚ2GB£¬ÄÇô¾Í±ØÐë¶Ôext2Îļþϵͳ´ò´óÎļþÖ§³Ö(LFS)²¹¶¡¡£ÆäËûÎļþϵͳÖîÈç ReiserFS ºÍ XFS ÔòûÓÐÕâ¸öÏÞÖÆ¡£
ÔÚMySQLͶÈëÉú²ú֮ǰ£¬ÎÒÃǽ¨ÒéÄãÔÚÓûʹÓÃµÄÆ½Ì¨ÉÏÏÈ×öһϲâÊÔ¡£

ÆäËûtips£º

    * Èç¹ûÓÐ×ã¹»µÄRAM(Ëæ»ú´æ´¢Æ÷)£¬ÔòÓ¦¸ÃÈ¥µôËùÓеĽ»»»É豸¡£ÓÐЩ²Ù×÷ϵͳÔÚһЩÇé¾°Öо¡¹ÜÓÐÊ£ÓàÄÚ´æÒ²»áʹÓý»»»É豸¡£
    * ʹÓÃMySQLÑ¡Ïî --skip-external-locking À´±ÜÃâÍâ²¿Ëø¡£´ÓMySQL 4.0¿ªÊ¼£¬Õâ¸öÑ¡ÏîĬÈÏÊÇ´ò¿ªµÄ¡£ÔÚÕâ֮ǰ£¬Ö»ÓбàÒëÖ§³Ö
      MIT-pthreads ²ÅÄÜĬÈÏ´ò¿ª£¬ÒòΪÔÚËùÓÐÆ½Ì¨ÉϵÄMIT-pthreads ²»ÄÜÈ«²¿¶¼Ö§³Ö flock()¡£ÕâÔÚLinuxÉÏÒ²ÊÇĬÈÏ´ò¿ªµÄ£¬ÒòΪLinuxµÄÎļþËø»¹²»°²È«¡£×¢Ò⣬--skip-external-locking Ñ¡ÏîÔÚ·þÎñÆ÷ÔËÐÐʱ²¢²»»áÓ°ÏìÆä¹¦ÄÜÐÔ¡£Ö»Òª¼ÇסÔÚÔËÐÐ
      myisamchk ǰҪ¹Ø±Õ·þÎñÆ÷(»òÕßËø¶¨²¢ÇÒË¢ÐÂÏà¹ØÊý¾Ý±í)¡£ÔÚһЩ²Ù×÷ϵͳÉÏÕâ¸öÑ¡ÏîÊÇÇ¿ÖÆµÄ£¬ÒòΪÍâ²¿ËøÔÚÈκÎÇé¿ö϶¼ÎÞ·¨Ê¹Óᣲ»ÄÜʹÓà --skip-external-locking Ñ¡ÏîµÄΨһÇé¿öÊÇ£ºÔÚͬһ¸öÊý¾ÝÉÏÔËÐжà¸öMySQL·þÎñÆ÷(²»Êǿͻ§¶Ë)£¬»òÕßÔËÐÐ
      myisamchk ¼ì²é(²»ÊÇÐÞ¸´)Êý¾Ý±íǰûÓÐÏȸæËß·þÎñÆ÷Ҫˢв¢ÇÒËø¶¨¸Ã±í¡£Ê¹Óà --skip-external-locking Ñ¡ÏîºóÒÀ¾É¿ÉÒÔʹÓà LOCK TABLES ºÍ UNLOCK TABLES Óï¾ä¡£




7.5.2 µ÷Õû·þÎñÆ÷²ÎÊý





¿ÉÒÔʹÓÃÒÔÏ mysqld ÃüÁî(ÔÚMySQL 4.1ÒÔǰ£¬ºöÂÔ --verbose)À´È·¶¨Ä¬ÈϵĻº³å´óС£º



shell> mysqld --verbose --help



Õâ¸öÃüÁî²úÉúÁËËùÓÐµÄ mysqld Ñ¡ÏîÒÔ¼°¿ÉÒÔÅäÖõÄϵͳ±äÁ¿ÁÐ±í¡£½á¹ûÖаüÀ¨Ä¬ÈÏÖµ£¬¿´ÆðÀ´ÏñÊÇÈçÏ£º



back_log                 current value: 5bdb_cache_size           current value: 1048540binlog_cache_size        current value: 32768connect_timeout          current value: 5delayed_insert_limit     current value: 100delayed_insert_timeout   current value: 300delayed_queue_size       current value: 1000flush_time               current value: 0interactive_timeout      current value: 28800join_buffer_size         current value: 131072key_buffer_size          current value: 1048540long_query_time          current value: 10lower_case_table_names   current value: 0max_allowed_packet       current value: 1048576max_binlog_cache_size    current value: 4294967295max_connect_errors       current value: 10max_connections          current value: 100max_delayed_threads      current value: 20max_heap_table_size      current value: 16777216max_join_size            current value: 4294967295max_sort_length          current value: 1024max_tmp_tables           current value: 32max_write_lock_count     current value: 4294967295myisam_sort_buffer_size  current value: 8388608net_buffer_length        current value: 16384net_read_timeout         current value: 30net_retry_count          current value: 10net_write_timeout        current value: 60read_buffer_size         current value: 131072read_rnd_buffer_size     current value: 262144slow_launch_time         current value: 2sort_buffer              current value: 2097116table_cache              current value: 64thread_concurrency       current value: 10thread_stack             current value: 131072tmp_table_size           current value: 1048576wait_timeout             current value: 28800



Èç¹ûµ±Ç°ÓÐ mysqld ·þÎñÆ÷ÔÚÔËÐУ¬¿ÉÒÔÁ¬½ÓÉÏÈ¥ÓÃÒÔÏÂÃüÁîÀ´²é¿´Êµ¼ÊʹÓõÄϵͳ±äÁ¿£º



mysql> SHOW VARIABLES;



Ò²¿ÉÒÔÓÃÒÔÏÂÓï¾äÀ´²é¿´ÔËÐÐÖеÄϵͳµÄͳ¼Æ½á¹û¼°×´Ì¬±¨¸æ£º



mysql> SHOW STATUS;



ϵͳ±äÁ¿ÒÔ¼°×´Ì¬ÐÅÏ¢Ò²¿ÉÒÔͨ¹ý
mysqladmin À´µÃµ½£º



shell> mysqladmin variablesshell> mysqladmin extended-status

ÔÚÕ½Ú"5.2.3 Server System Variables"ºÍ"5.2.4 Server Status Variables"ÖпÉÒÔÕÒµ½È«²¿µÄϵͳÃèÊö¼°×´Ì¬±äÁ¿¡£
MySQLʹÓõÄËã·¨ÓиßÉìËõÐÔ£¬Òò´ËËüͨ³£¿ÉÒÔֻʹÓúÜÉÙÄÚ´æ¾ÍÄÜÔËÐС£²»¹ý£¬¸øMySQL¸ü¶àµÄÄÚ´æÍ¨³£ÄÜÈ¡µÃ¸üºÃµÄÐÔÄÜ¡£
µ÷ÕûMySQL·þÎñÆ÷ʱ£¬Á½¸ö×îÖØÒªµÄ±äÁ¿¾ÍÊÇ key_buffer_size ºÍ table_cache¡£ÔÚÊÔͼÐÞ¸ÄÆäËû±äÁ¿Ç°Ó¦¸ÃÊ×ÏÈÈ·ÈÏÒѾ­ºÏÀíÉ趨ÕâÁ½¸ö±äÁ¿ÁË¡£
ÒÔÏÂÀý×ÓչʾÁËÔÚ²»Í¬µÄÔËÐÐʱÅäÖÃһЩµäÐ͵ıäÁ¿Öµ¡£ÕâЩÀý×ÓʹÓà mysqld_safe ½Å±¾ºÍ --var_name=value Óï·¨À´É趨±äÁ¿ var_name µÄֵΪ value¡£Õâ¸öÓï·¨ÔÚMySQL 4.0ÒÔºó¾Í¿ÉÒÔÓÃÁË£¬Ôھɰ汾µÄMySQLÖУ¬¿¼Âǵ½ÈçÏÂһЩ²»Í¬Ö®´¦£º



    * ʹÓà safe_mysqld ½Å±¾¶ø·Ç mysqld_safe¡£

      

      
    * ʹÓà --set-variable=var_name=value »ò -O var_name=value Óï·¨À´ÉèÖñäÁ¿¡£

      

      
    * Èç¹û±äÁ¿ÃûÒÔ _size ½á⣬¾Í±ØÐëÈ¥µô _size¡£ÀýÈ磬һ¸ö¾É±äÁ¿ÃûΪ sort_buffer_size ¾ÍÊÇ sort_buffer£¬¾É±äÁ¿Ãûread_buffer_size ¾ÍÊÇ record_buffer¡£Óà mysqld --helpÀ´Òª¿´ÄÇЩ±äÁ¿Êǵ±Ç°·þÎñÆ÷°æ±¾¿ÉÒÔʶ±ðµÄ¡£





Èç¹ûÖÁÉÙÓÐ256MBÄڴ棬ÇÒÓдóÁ¿µÄÊý¾Ý±í£¬»¹ÏëÒªÔÚÓÐÖеÈÊýÁ¿µÄ¿Í»§¶ËÁ¬½ÓʱÄÜÓÐ×î´óÐÔÄÜ£¬¿ÉÒÔÕâôÉ趨£º



shell> mysqld_safe --key_buffer_size=64M --table_cache=256 \--sort_buffer_size=4M --read_buffer_size=1M &



Èç¹ûÖ»ÓÐ128MBÄڴ棬ÇÒÖ»ÓÐÉÙÁ¿±í£¬µ«ÊÇÐèÒª×ö´óÁ¿µÄÅÅÐò£¬¿ÉÒÔÕâôÉ趨£º



shell> mysqld_safe --key_buffer_size=16M --sort_buffer_size=1M



Èç¹ûÓдóÁ¿µÄ²¢·¢Á¬½Ó£¬³ý·Ç mysqld ÒѾ­ÉèÖóɶÔÿ´ÎÁ¬½ÓÖ»ÊÇÓúÜÉÙµÄÄڴ棬·ñÔò¿ÉÄÜ·¢Éú½»»»ÎÊÌâ¡£mysqld ÔÚ¶Ôÿ´ÎÁ¬½Ó¶¼ÓÐ×ã¹»ÄÚ´æÊ±ÐÔÄܸüºÃ¡£

Èç¹ûÖ»ÓкÜÉÙÄÚ´æÇÒÓдóÁ¿Á¬½Ó£¬¿ÉÒÔÕâôÉ趨£º



shell> mysqld_safe --key_buffer_size=512K --sort_buffer_size=100K \--read_buffer_size=100K &



ÉõÖÁÕâÑù£º



shell> mysqld_safe --key_buffer_size=512K --sort_buffer_size=16K \--table_cache=32 --read_buffer_size=8K \--net_buffer_length=1K &



Èç¹ûÔÚÒ»¸ö±È¿ÉÓÃÄÚ´æ´óºÜ¶àµÄ±êÉÏ×ö GROUP BY »ò ORDER BY ²Ù×÷ʱ£¬ÄÇô×îºÃ¼Ó´ó read_rnd_buffer_size µÄÖµÒÔ¼ÓËÙÅÅÐò²Ù×÷ºóµÄ¶ÁÊý¾Ý¡£
°²×°MySQLºó£¬ÔÚ `support-files' Ŀ¼Ï»áÓÐһЩ²»Í¬µÄ `my.cnf' ÑùÀýÎļþ£º `my-huge.cnf', `my-large.cnf', `my-medium.cnf' ºÍ `my-small.cnf'¡£¿ÉÒÔ°ÑËüÃÇ×÷ΪÓÅ»¯ÏµÍ³µÄÀ¶±¾¡£
×¢Ò⣬Èç¹ûÊÇͨ¹ýÃüÁîÐиø mysqld »ò mysqld_safe Ö¸¶¨²ÎÊý£¬ÄÇôËüÖ»ÔÚÄÇ´ÎÆô¶¯·þÎñÆ÷ʱÓÐЧ¡£ÏëÒªÈÃÕâЩѡÏîÔÚ·þÎñÆ÷Æô¶¯Ê±¶¼ÓÐЧ£¬¿ÉÒÔ°ÑËüÃǷŵ½ÅäÖÃÎļþÖС£
ÏëÒª¿´²ÎÊý¸Ä±äºóµÄЧ¹û£¬¿ÉÒÔÓÃÒÔÏ·½·¨(ÔÚMySQL 4.1ÒÔǰ£¬ºöÂÔ --verbose)£º



shell> mysqld --key_buffer_size=32M --verbose --help



Õâ¸ö±äÁ¿¾Í»áÔÚ½á¹ûµÄ¿¿½üĩβÁгöÀ´¡£È·ÈÏ --verbose ºÍ --help Ñ¡ÏîÊÇ·ÅÔÚ×îºóÃæ£¬·ñÔò£¬ÔÚÃüÁîÐÐÉÏÁгöÀ´µÄ½á¹ûÖÐÔÚËüÃÇÖ®ºóµÄÆäËûÑ¡ÏîЧ¹û¾Í²»»á±»·´Ó³³öÀ´ÁË¡£
¹ØÓÚµ÷Õû InnoDB ´æ´¢ÒýÇæµÄÏêϸÐÅÏ¢Çë²Î¿¼"16.12 InnoDB Performance Tuning Tips"¡£

7.5.3 ¿ØÖƲéѯÓÅ»¯ÐÔÄÜ





²éѯÓÅ»¯³ÌÐòµÄÈÎÎñ¾ÍÊÇÕÒµ½×î¼ÑµÄÖ´ÐÐSQL²éѯµÄ·½·¨¡£ÒòΪ"ºÃ"ºÍ"»µ"·½·¨Ö®¼äµÄÐÔÄܲîÒì¿ÉÄÜÓÐÊýÁ¿¼¶ÉϵÄÇø±ð(Ò²¾ÍÊÇ˵£¬ÃëÏà¶ÔСʱ£¬ÉõÖÁÊÇÌì)£¬ MySQLÖеĴ󲿷ֲéѯÓÅ»¯³ÌÐò»ò¶à»òÉÙ»áÇî¾ÙËÑË÷¿ÉÄܵÄÓÅ»¯·½·¨£¬´ÓÖÐÕÒµ½×î¼ÑµÄ·½·¨À´Ö´ÐС£ÄÃÁ¬½Ó²éѯÀ´Ëµ£¬MySQLÓÅ»¯³ÌÐòËÑË÷µÄ¿ÉÄÜ·½·¨»áËæ×ŲéѯÖÐÒýÓñíÊýÁ¿µÄÔö¼Ó¶øÖ¸ÊýÔö¼Ó¡£Èç¹û±íÊýÁ¿½ÏÉÙ(ͨ³£ÉÙÓÚ7-10¸ö)£¬ÄÇôÕâ»ù±¾Éϲ»ÊÇÎÊÌâ¡£²»¹ý£¬µ±Ìá½»Ò»¸öºÜ´óµÄ²éѯʱ£¬·þÎñÆ÷µÄÐÔÄÜÖ÷Ҫƿ¾±ºÜÈÝÒ׾ͻ¨·ÑÔÚÓÅ»¯²éѯÉÏ¡£
MySQL 5.0.1Òý½øÁËÒ»¸ö¸üÁé»îµÄ·½·¨£¬ËüÔÊÐíÓû§¿ØÖÆÔÚ²éѯÓÅ»¯³ÌÐòÇî¾ÙËÑË÷×î¼ÑÓÅ»¯·½·¨µÄÊýÁ¿¡£Ò»°ãµÄ¿¼ÂÇÊÇ£¬ÓÅ»¯³ÌÐòËÑË÷µÄ·½·¨Ô½ÉÙ£¬ÄÇôÔÚ±àÒë²éѯʱºÄ·ÑµÄʱ¼ä¾ÍÔ½ÉÙ¡£ÁíÒ»¸ö·½Ã棬ÓÉÓÚÓÅ»¯³ÌÐò¿ÉÄÜ»áºöÂÔһЩ·½·¨£¬Òò´Ë¿ÉÄÜ´í¹ýÕÒµ½×î¼ÑÓÅ»¯·½·¨¡£

¹ØÓÚ¿ØÖÆÓÅ»¯³ÌÐòÆÀ¹ÀÓÅ»¯·½·¨µÄÊýÁ¿¿ÉÒÔͨ¹ýÒÔÏÂÁ½¸öϵͳ±äÁ¿£º

    * ±äÁ¿ optimizer_prune_level ¸æËßÓÅ»¯³ÌÐòÔÚ¹ÀËãÒª·ÃÎʵÄÿ¸ö±íµÄ¼Ç¼Êý»ù´¡ÉϺöÂÔÒ»¶¨ÊýÁ¿µÄ·½·¨¡£ÎÒÃǵľ­Ñé±íÃ÷£¬ÕâÖÖ"ѧϰ²Â²â"·½·¨ºÜÉÙ»á´í¹ý×î¼Ñ·½·¨£¬ÒòΪËü¿ÉÄÜÏ·¾çÐԵؼõÉÙ±àÒëʱ¼ä¡£Õâ¾ÍÊÇΪʲôÕâ¸öÑ¡ÏîĬÈÏÊÇ´ò¿ªµÄ(optimizer_prune_level=1)¡£²»¹ý£¬Èç¹ûÈ·ÐÅÓÅ»¯³ÌÐò»á´í¹ý¸üºÃµÄ·½·¨£¬Õâ¸öÑ¡Ïî¿ÉÒÔ¹ØÉÏ(optimizer_prune_level=0)£¬²»¹ýҪעÒâ±àÒë²éѯµÄʱ¼ä¿ÉÄÜ»á¸ü³¤ÁË¡£Òª×¢Ò⾡¹ÜÊÇÓÃÁËÕâÖÖÊÔ̽·½·¨£¬ÓÅ»¯³ÌÐòÈÔ»áµ÷²éÖ¸Êý¼¶µÄ·½·¨¡£

      

      
    * ±äÁ¿ optimizer_search_depth
      ¸æËßÓÅ»¯³ÌÐò"½«À´"µÄÿ´Î˳Ðòµ÷²é²»ÍêÈ«µÄ·½·¨ÊÇ·ñÐèÒªÀ©³äµÄ¸üÔ¶µÄÉî¶È¡£optimizer_search_depth µÄֵԽС£¬¿ÉÄܻᵼÖ²éѯ±àÒëʱ¼äµÄÔ½ÉÙ¡£ÀýÈ磬ÓÐÒ»¸ö12-13»ò¸ü¶à±íµÄ²éѯºÜÈÝÒ×¾ÍÐèÒª¼¸Ð¡Ê±ÉõÖÁ¼¸ÌìµÄʱ¼äÀ´±àÒ룬Èç¹û optimizer_search_depth µÄÖµºÍ±íÊýÁ¿Ïà½üµÄ»°¡£Í¬Ñù£¬Èç¹û optimizer_search_depth µÄÖµµÈÓÚ3»ò4£¬Ôò±àÒëÆ÷¿ÉÄÜÖÁÐèÒª»¨²»µ½¼¸·ÖÖÓµÄʱ¼ä¾ÍÍê³É±àÒëÁË¡£Èç¹û²»ÄÜÈ·¶¨ optimizer_search_depth µÄÖµ¶àÉٲźÏÊÊ£¬¾Í°ÑËüÉèÖÃΪ0£¬ÈÃÓÅ»¯³ÌÐòÀ´×Ô¶¯¾ö¶¨¡£

ÒúÉú ·¢±íÓÚ 2007-11-16 13:30

7.5.4 ±àÒëºÍÁ¬½ÓÈçºÎÓ°ÏìMySQLµÄËÙ¶È





ÒÔϵĴ󲿷ֲâÊÔ¶¼ÊÇÔÚLinuxÉÏÓÃMySQLµÄ»ù×¼Ì×¼þÀ´×öµÄ£¬²»¹ýËüÃÇ¶ÔÆäËû²Ù×÷ϵͳÒÔ¼°²»Í¬µÄ¹¤×÷Á¿Ò²ÊÇÓÐÒ»¶¨ÆôʾµÄ¡£
Óà -static Á¬½ÓµÄ»°£¬MySQLÖ´ÐÐËٶȵÄËÙ¶ÈÊÇ×î¿ìµÄ¡£
ÔÚLinuxÉÏ£¬Óà pgcc ºÍ -O3 ±àÒëµÄ´úÂë×î¿ì¡£´ó¸ÅÐèÒª200MBµÄÄÚ´æ¼ÓÉÏÕâЩѡÏîÀ´±àÒë `sql_yacc.cc`£¬ÒòΪ gcc/pgcc ÐèÒª´óÁ¿ÄÚ´æÀ´±àÒëËùÓеÄÄÚ²¿º¯Êý¡£ÏëÒªÅäÖÃMySQLÒÔ±ÜÃâ°üº¬ libstdc++ ¿â¾ÍÒª¼ÓÉÏ CXX=gcc ²ÎÊý£¬²»¹ýÕâ²»ÊDZØÐëµÄ¡£×¢Ò⣬ʹÓÃijЩ°æ±¾µÄ pgcc ±àÒëµÄ½á¹û´úÂëÖ»ÄÜÔÚ±¼ÌÚ´¦ÀíÆ÷ÉÏÔËÐУ¬¾¡¹ÜÒѾ­¸ø±àÒëÆ÷Ôö¼ÓÑ¡ÏîÏëÈýá¹û´úÂë¿ÉÒÔÔÚËùÓеÄx586ÀàÐÍ(ÈçAMD)´¦ÀíÆ÷ÉÏÔËÐС£
Èç¹ûʹÓñȽϺõıàÒëÆ÷ÒÔ¼°±àÒëÑ¡ÏӦÓóÌÐò´ó¸ÅÄÜÌá¸ß10-30%µÄËÙ¶È¡£ÕâÔÚ×Ô¼º±àÒëMySQL·þÎñÆ÷µÄʱºòÓÈÎªÖØÒª¡£
ÎÒÃÇÒѾ­²âÊÔ Cygnus CodeFusion ºÍ Fujitsu ±àÒëÆ÷ÁË£¬²»¹ý²âÊÔËüÃÇʱ£¬ÎÞÂÛÄĸö¶¼Ã»ÓÐÍêÈ«µØ½â¾öbugÒÔÔÊÐí×î¼Ñ·½Ê½±àÒëMySQL¡£
±ê×¼µÄMySQL¶þ½øÖÆ·¢²¼°üÒѾ­±àÒëÖ§³ÖËùÓеÄ×Ö·û¼¯ÁË¡£Èç¹ûÏëÒª×Ô¼º±àÒëMySQL£¬Ö»Ðè±àÒëÖ§³ÖÏëҪʹÓõÄ×Ö·û¼¯¡£¿ÉÒÔÔÚ configure ʱÔö¼Ó --with-charset Ñ¡ÏîÀ´¿ØÖÆ¡£

ÒÔÏÂÊÇÎÒÃÇÒѾ­×ö¹ýµÄһЩ²âÁ¿£º

    * Èç¹ûʹÓà pgcc
      ±àÒëÈκζ«Î÷ʱÓà -O6 Ñ¡ÏÔò mysqld ·þÎñÆ÷»á±ÈÓà gcc 2.95.2 ±àÒë¿ì1%¡£

      

      
    * Èç¹ûʹÓö¯Ì¬Á¬½Ó(ûÓà -static)£¬ÔòÔÚLinuxÉϽá¹û»áÂý13%¡£×¢Ò⣬ÕâÈÔÈ»¿ÉÒÔÈÃÄãµÄÓ¦ÓóÌÐò¿Í»§¶Ë¶¯Ì¬Á¬½ÓMySQLµÄ¿â¡£Õâ¶ÔÌá¸ß·þÎñÆ÷ÐÔÄÜÏ൱¹Ø¼ü¡£

      

      
    * Èç¹û×ö strip mysqld ÁË£¬Ôò½á¹û»á¿ì4%¡£

      

      
    * ÔÚͬһ¸öÖ÷»úÉÏÁ¬½Óµ½·þÎñÆ÷£¬Èç¹ûʹÓÃTCP/IP¶ø²»ÊÇUnixÌ×½Ó×ÖÎļþ£¬ÄÇô»áÂý7.5%(ÔÚUnixÉÏ£¬Èç¹ûʹÓÃÖ÷»úÃû localhost Á¬½Ó£¬MySQLĬÈÏʹÓÃÌ×½Ó×ÖÎļþ)¡£

      

      
    * ÓÃTCP/IPÁ¬½Óʱ£¬Ö±½ÓÁ¬½Ó±¾»ú·þÎñÆ÷±ÈÁ¬½Ó²»Í¬Ö÷»úÉϵķþÎñÆ÷»áÂý8-11%£¬¾¡¹ÜÊÇͨ¹ý100Mb/sµÄÒÔÌ«Íø¡£
    * ÔËÐлù×¼²âÊÔʱÈç¹û²ÉÓð²È«Á¬½Ó(ËùÓеÄÊý¾Ý¶¼ÓÃÄÚ²¿Ö§³ÖµÄSSL¼ÓÃÜ)Ôò»á±ÈÓò»¼ÓÃÜÁ´½ÓÂý55%¡£

      

      
    * ±àÒëʱÔö¼Ó --with-debug=full Ñ¡ÏÔò´ó²¿·Ö²éѯ¶¼»áÂý20%¡£Ò»Ð©²éѯ¿ÉÄÜ»á±äµÃºÜÂý£»ÀýÈ磬MySQLµÄ»ù×¼Ì×¼þ¿ÉÄÜ»áÂý35%¡£Èç¹ûÖ»Ôö¼ÓÑ¡Ïî --with-debug(ûÓÐ
      =full)£¬ÔòÖ»»áÂý15%¡£Ò»¸öʹÓà --with-debug=full Ñ¡Ïî±àÒëºóµÄ mysqld ¿ÉÒÔÔÚÆô¶¯Ê±Ôö¼Ó --skip-safemalloc Ñ¡ÏîÀ´½ûÓÃÔËÐÐʱÄÚ´æ¼ì²é¡£ÔòÖ´ÐÐËٶȾͻá½Ó½üÓÚÔö¼Ó --with-debug ²ÎÊýʱµÄÇé¿ö¡£

      

      
    * ÔÚ Sun UltraSPARC-IIe ÉÏ£¬Óà Forte 5.0 ±àÒëµÄ·þÎñÆ÷»á±ÈÓà gcc 3.2 ±àÒëµÄ¿ì4%¡£

      

      
    * ÔÚ Sun UltraSPARC-IIe ÉÏ£¬Óà Forte 5.0 ±àÒëµÄ·þÎñÆ÷ÔÚ32λƽ̨ÉϱÈÔÚ64λƽ̨ÉÏ¿ì4%¡£

      

      
    * ÔÚ UltraSPARC ÉÏÓà gcc 2.95.2 ±àÒ룬Ôö¼Ó
      -mcpu=v8 -Wa,-xarch=v8plusa Ñ¡ÏîµÄ»°»á¿ì4%¡£

      

      
    * ÔÚ Solaris 2.5.1 ÉÏ£¬MIT-pthreads ±È Solaris ԭʼµÄµ¥´¦ÀíÆ÷Ïß³ÌÂý8-12%¡£ÔÚ²»Í¬µÄ¸ºÔØ»òÕßCPUÏ£¬Õâ¸ö²îÒì»á¸ü´ó¡£
    * ÔÚ Linux x86ÉÏÓà gcc ±àÒ룬²»Ôö¼Ó Ö¡Ö¸Õë(-fomit-frame-pointer »ò -fomit-frame-pointer -ffixed-ebp)Ñ¡Ïî µÄ»°»áÂý1-4%¡£



MySQL ABÌṩµÄLinuxÉϵÄMySQL¶þ½øÖÆ·¢²¼°üͨ³£Óà pgcc ±àÒë¡£²»¹ýÎÒÃÇÓÖÖØÐÂʹÓà gcc À´±àÒëÁË£¬ÒòΪÓà pgcc ±àÒëµÄ´úÂë²»ÄÜÔÚAMDÉÏÔËÐС£ÎÒÃÇ»áһֱʹÓà gcc À´±àÒëÖ±µ½ pgcc µÄÕâ¸öbug½â¾öÁË¡£Óë´Ëͬʱ£¬Èç¹ûÄãÓзÇAMD»úÆ÷£¬¾Í¿ÉÒÔÓà pgcc À´±àÒëÒÔʹMySQL¸ü¿ì¡£±ê×¼µÄMySQL Linux¶þ½øÖưüÊǾ²Ì¬Á¬½ÓµÄ£¬ÕâʹµÃËü¸ü¿ìÇÒÒÆÖ²ÐÔ¸üºÃ¡£


7.5.5 MySQL ÈçºÎʹÓÃÄÚ´æ



ÒÔÏÂչʾÁË mysqld ·þÎñÆ÷ʹÓÃÄÚ´æµÄ¼¸ÖÖ·½·¨¡£¿ÉÊÊÓõÄÊÇ£¬ºÍʹÓÃÄÚ´æÏà¹ØµÄϵͳ±äÁ¿ÃûÒѾ­¸ø³öÁË£º




    * Ë÷Òý»º³å(key_buffer_size ±äÁ¿)ÔÚËùÓеÄÏ̼߳äÊǹ²ÏíµÄ£»·þÎñÆ÷ËùÐèµÄÆäËû»º³åÒѾ­·ÖÅäºÃÁË¡£ÏêÇéÇë¿´"7.5.2 Tuning Server Parameters"¡£
    * ÿ¸öÁ¬½ÓʹÓõÄһЩÏß³ÌÌØÓеĿռ䣺
          o Ò»¸ö¶ÑÕ»(ĬÈÏÊÇ64KB£¬thread_stack ±äÁ¿)¡£

            

            
          o Ò»¸öÁ¬½Ó»º³å(net_buffer_length ±äÁ¿)¡£
          o Ò»¸ö½á¹û»º³å(net_buffer_length ±äÁ¿)¡£

      Á¬½Ó»º³åºÍ½á¹û»º³å¿É¸ù¾ÝÐèÒª¶¯Ì¬À©´óµ½ max_allowed_packet¡£Ò»¸ö²éѯÕýÔÚÖ´ÐÐʱ£¬µ±Ç°²éѯÓï¾äµÄÒ»·Ý¿½±´Ò²ÐèҪΪ֮·ÖÅäÄÚ´æ¡£
    * ËùÓеÄÏ̹߳²ÏíÒ»ÑùµÄ»ù±¾ÄÚ´æ¡£

      

      
    * Ö»ÓÐѹËõºóµÄ ISAM ºÍ MyISAM ±í²ÅÊÇÄÚ´æÓ³ÉäµÄ¡£ÕâÊÇÒòΪ32λµÄÄÚ´æÖ»ÓÐ4GBµÄÄÚ´æ¿Õ¼ä£¬¶Ô´ó²¿·Ö´ó±í¶¼²»¹»¡£µ±64λѰַµÄ²Ù×÷ϵͳ¸üÆÕ±éʱ£¬ÎÒÃÇ»áÆÕ±éÖ§³ÖÄÚ´æÓ³ÉäµÄ¡£
    * ÿ¸öÐèҪ˳ÐòɨÃèÊý¾Ý±íµÄÇëÇó¶¼ÐèÒª·ÖÅäÒ»¸ö¶Á»º³å(read_buffer_size ±äÁ¿)¡£
    * Èç¹ûÒÔ"Ëæ»ú"˳Ðò¶ÁÈ¡¼Ç¼(ÀýÈ磬ÅÅÐòÖ®ºó)£¬Ò»¸öËæ»ú-¶Á»º³å¾Í±ØÐë·ÖÅäÒÔ±ÜÃâ´ÅÅÌËÑË÷(read_rnd_buffer_size ±äÁ¿)¡£
    * ËùÓеıíÁ¬½Ó¶¼ÔÚÒ»¸ö²½ÖèÖÐÍê³É£¬ÉõÖÁ´ó²¿·ÖÁ¬½Ó¿ÉÒÔ²»Ê¹ÓÃÁÙʱ±í¾ÍÄÜÍê³É¡£´ó²¿·ÖÁÙʱ±í¶¼ÊÇ»ùÓÚÄÚ´æ(HEAP ±í)µÄ¡£¼Ç¼³¤¶ÈºÜ³¤(ËùÓеÄ×ֶ㤶ÈÖ®ºÍ)»òÕß°üº¬ÓÐ BLOB ×ֶεÄÁÙʱ±í¶¼»á´æ´¢ÔÚ´ÅÅÌÖС£ÔÚMySQL 3.23.2֮ǰÓÐÒ»¸öÎÊÌâÊÇ£¬µ±Ò»¸öÄÚ²¿µÄÄÚ´æ±í´óС³¬¹ý tmp_table_size ºó£¬¾Í»á²úÉúÒ»¸ö The
      table tbl_name is full ´íÎó¡£ÔÚMySQL 3.23.2ºó£¬Õâ»á×Ô¶¯´¦Àí£¬ÔÚ±ØÐëµÄʱºò°ÑÄÚ´æ±íת»»³É»ùÓÚ´ÅÅÌ´æ´¢µÄ MyISAM ±í¡£ÏëÒªÔھɰ汾µÄMySQLÒ²ÄÜÕý³£ÔËÐУ¬¿ÉÒÔ¸ø mysqld ÉèÖà tmp_table_size Ñ¡ÏîÒÔÔö¼ÓÁÙʱ±í´óС£¬»òÕßÔÚ¿Í»§¶Ë³ÌÐòÖÐÉèÖà SQL_BIG_TABLES Ñ¡Ïî¡£ÏêÇéÇë¿´"14.5.3.1 SET Syntax"¡£ÔÚMySQL 3.20ÖУ¬ÁÙʱ±íµÄ´óС×î¶àΪ
      record_buffer*16£»Èç¹ûÄãʹÓÃÕâ¸ö°æ±¾£¬¾Í±ØÐë¼Ó´ó
      record_buffer µÄÖµ¡£¿ÉÒÔÔÚʹÓÃ
      --big-tables Ñ¡ÏîÆô¶¯ mysqld À´ÔÊÐí½«ÁÙʱ±í±£´æÔÚ´ÅÅÌÖС£²»¹ýÕâ»áÓ°ÏìºÜ¶à²éѯ±àÒë¡£
    * ´ó²¿·ÖÐèÒª×öÅÅÐòµÄÇëÇó¶¼»á·ÖÅäÅÅÐò»º³å£¬ÇÒÊÓ½á¹û¼¯´óС·ÖÅä0µ½2¸öÁÙʱÎļþ¡£ÏêÇéÇë¿´"A.4.4 Where MySQL Stores Temporary Files"¡£
    * ¼¸ºõËùÓеĽâÎöºÍ¼ÆËãÔÚ±¾µØÄÚ´æ´æ´¢ÖÐÒѾ­×öÍêÁË¡£ÎÞÐèΪСµÄÌõÄ¿ºÄ·ÑÄڴ棬Òò´Ëͨ³£ÄܱÜÃâ±È½ÏÂýµÄÄÚ´æ·ÖÅäÒÔ¼°ÊÍ·Å¡£ÄÚ´æÖ»·ÖÅ䏸²»¿ÉÔ¤ÁϵĴó×Ö·û´®£»ÕâÓÉ malloc() ºÍ free() À´Íê³É¡£
    * ÿ¸ö´ò¿ª×ÅµÄ MyISAM ºÍ ISAM ±í£¬Ë÷ÒýÎļþÖ»´ò¿ªÒ»´Î£¬¶øÊý¾ÝÎļþÔòÊÇÿ´ÎΪͬʱÔËÐеÄÏ̴߳ò¿ªÒ»´Î¡£ÔÚÿ¸öµ±Ç°µÄÏß³ÌÖУ¬±í½á¹¹£¬Ã¿¸ö×ֶεĽṹ£¬ÐèÒª·ÖÅä´óС 3 * N µÄ»º³å(N ÊǼǼµÄ×î´ó³¤¶È£¬²»¼ÆËã BLOB ×Ö¶Î)¡£BLOB ×Ö¶ÎÐèÒª±È BLOB Êý¾Ý³¤¶È¶à³öÀ´5µ½8×Ö½Ú¡£MyISAM ºÍ ISAM ´æ´¢ÒýÇæÎ¬»¤Ò»¸ö¶îÍâµÄ»º³å×ֶι©ÄÚ²¿Ê¹Óá£
    * ¶ÔÓÚÿ¸öÓÐ BLOB ×Ö¶ÎµÄ±í£¬×¨ÃÅΪÆäÀ©Õ¹Ò»¸ö¶¯Ì¬»º³åÀ´¶ÁÈ¡´ó BLOB Êý¾Ý¡£¶Á±íµÄʱºò£¬¾Í»á·ÖÅäÒ»¸öÒÔ×î´ó³¤µÄ BLOB Êý¾Ý³¤¶ÈµÄ»º³å¡£
    * ËùÓеÄʹÓÃÖеıí¾ä±ú¶¼»º´æÆðÀ´²¢ÇÒ±»µ±×÷FIFOÀ´¹ÜÀí¡£Ä¬Èϵأ¬Õâ¸ö»º´æÓÐ64¸ö±íÄ¿¡£Èç¹ûÓÐÒ»¸ö±íͬʱ±»Á½¸öÔËÐÐ×ŵÄÏß³ÌʹÓÃÁË£¬ÄÇôÔÚ»º´æÖаüº¬Á˸ñíµÄ2¸ö±íÄ¿¡£ÏêÇéÇë¿´"7.4.8 How MySQL Opens and Closes Tables"¡£
    * FLUSH TABLES Óï¾ä»ò mysqladmin flush-tables ÃüÁî»á¹Ø±ÕËùÓзÇʹÓÃÖÐµÄ±í£¬²¢ÇÒÒ²»áÔÚÏ߳̽áÊøºó¹Ø±ÕÄÇЩʹÓÃÖÐµÄ±í¡£Õâ¶ÔÊÍ·ÅʹÓÃÖеÄÄÚ´