Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
MySQL Optimization ÓÅ»¯Ô­Àí
 
  2296  次浏览      27
 2018-3-28  
 
±à¼­ÍƼö:
±¾ÎÄÀ´×ÔÓÚsegmentfault.com,±¾ÎÄÖеÄÔ­Àí¡¢Ê¾ÀýÄܹ»°ïÖú´ó¼Ò¸üºÃµÄ½«ÀíÂÛºÍʵ¼ùÁªÏµÆðÀ´£¬¸ü¶àµÄ½«ÀíÂÛ֪ʶÔËÓõ½Êµ¼ùÖС£

MySQLÂß¼­¼Ü¹¹

Èç¹ûÄÜÔÚÍ·ÄÔÖй¹½¨Ò»·ùMySQL¸÷×é¼þÖ®¼äÈçºÎЭͬ¹¤×÷µÄ¼Ü¹¹Í¼£¬ÓÐÖúÓÚÉîÈëÀí½âMySQL·þÎñÆ÷¡£ÏÂͼչʾÁËMySQLµÄÂß¼­¼Ü¹¹Í¼¡£

MySQLÂß¼­¼Ü¹¹£¬À´×Ô£º¸ßÐÔÄÜMySQL

MySQLÂß¼­¼Ü¹¹ÕûÌå·ÖΪÈý²ã£¬×îÉϲãΪ¿Í»§¶Ë²ã£¬²¢·ÇMySQLËù¶ÀÓУ¬ÖîÈ磺Á¬½Ó´¦Àí¡¢ÊÚȨÈÏÖ¤¡¢°²È«µÈ¹¦ÄܾùÔÚÕâÒ»²ã´¦Àí¡£

MySQL´ó¶àÊýºËÐÄ·þÎñ¾ùÔÚÖмäÕâÒ»²ã£¬°üÀ¨²éѯ½âÎö¡¢·ÖÎö¡¢ÓÅ»¯¡¢»º´æ¡¢ÄÚÖú¯Êý(±ÈÈ磺ʱ¼ä¡¢Êýѧ¡¢¼ÓÃܵȺ¯Êý)¡£ËùÓÐµÄ¿ç´æ´¢ÒýÇæµÄ¹¦ÄÜÒ²ÔÚÕâÒ»²ãʵÏÖ£º´æ´¢¹ý³Ì¡¢´¥·¢Æ÷¡¢ÊÓͼµÈ¡£

×îϲãΪ´æ´¢ÒýÇæ£¬Æä¸ºÔðMySQLÖеÄÊý¾Ý´æ´¢ºÍÌáÈ¡¡£ºÍLinuxϵÄÎļþϵͳÀàËÆ£¬Ã¿ÖÖ´æ´¢ÒýÇæ¶¼ÓÐÆäÓÅÊÆºÍÁÓÊÆ¡£ÖмäµÄ·þÎñ²ãͨ¹ýAPIÓë´æ´¢ÒýÇæÍ¨ÐÅ£¬ÕâЩAPI½Ó¿ÚÆÁ±ÎÁ˲»Í¬´æ´¢ÒýÇæ¼äµÄ²îÒì¡£

MySQL²éѯ¹ý³Ì

ÎÒÃÇ×ÜÊÇÏ£ÍûMySQLÄܹ»»ñµÃ¸ü¸ßµÄ²éѯÐÔÄÜ£¬×îºÃµÄ°ì·¨ÊÇŪÇå³þMySQLÊÇÈçºÎÓÅ»¯ºÍÖ´ÐвéѯµÄ¡£Ò»µ©Àí½âÁËÕâÒ»µã£¬¾Í»á·¢ÏÖ£ººÜ¶àµÄ²éѯÓÅ»¯¹¤×÷ʵ¼ÊÉϾÍÊÇ×ñѭһЩԭÔòÈÃMySQLµÄÓÅ»¯Æ÷Äܹ»°´ÕÕÔ¤ÏëµÄºÏÀí·½Ê½ÔËÐжøÒÑ¡£

¿Í»§¶Ë/·þÎñ¶ËͨÐÅЭÒé

MySQL¿Í»§¶Ë/·þÎñ¶ËͨÐÅЭÒéÊÇ¡°°ëË«¹¤¡±µÄ£ºÔÚÈÎһʱ¿Ì£¬ÒªÃ´ÊÇ·þÎñÆ÷Ïò¿Í»§¶Ë·¢ËÍÊý¾Ý£¬ÒªÃ´Êǿͻ§¶ËÏò·þÎñÆ÷·¢ËÍÊý¾Ý£¬ÕâÁ½¸ö¶¯×÷²»ÄÜͬʱ·¢Éú¡£Ò»µ©Ò»¶Ë¿ªÊ¼·¢ËÍÏûÏ¢£¬ÁíÒ»¶ËÒª½ÓÊÕÍêÕû¸öÏûÏ¢²ÅÄÜÏìÓ¦Ëü£¬ËùÒÔÎÒÃÇÎÞ·¨Ò²ÎÞÐ뽫һ¸öÏûÏ¢ÇгÉС¿é¶ÀÁ¢·¢ËÍ£¬Ò²Ã»Óа취½øÐÐÁ÷Á¿¿ØÖÆ¡£

¿Í»§¶ËÓÃÒ»¸öµ¥¶ÀµÄÊý¾Ý°ü½«²éѯÇëÇó·¢Ë͸ø·þÎñÆ÷£¬ËùÒÔµ±²éѯÓï¾äºÜ³¤µÄʱºò£¬ÐèÒªÉèÖÃmax_allowed_packet²ÎÊý¡£µ«ÊÇÐèҪעÒâµÄÊÇ£¬Èç¹û²éѯʵÔÚÊÇÌ«´ó£¬·þÎñ¶Ë»á¾Ü¾ø½ÓÊÕ¸ü¶àÊý¾Ý²¢Å׳öÒì³£¡£

ÓëÖ®Ïà·´µÄÊÇ£¬·þÎñÆ÷ÏìÓ¦¸øÓû§µÄÊý¾Ýͨ³£»áºÜ¶à£¬Óɶà¸öÊý¾Ý°ü×é³É¡£µ«Êǵ±·þÎñÆ÷ÏìÓ¦¿Í»§¶ËÇëÇóʱ£¬¿Í»§¶Ë±ØÐëÍêÕûµÄ½ÓÊÕÕû¸ö·µ»Ø½á¹û£¬¶ø²»Äܼòµ¥µÄÖ»È¡Ç°Ãæ¼¸Ìõ½á¹û£¬È»ºóÈ÷þÎñÆ÷Í£Ö¹·¢ËÍ¡£Òò¶øÔÚʵ¼Ê¿ª·¢ÖУ¬¾¡Á¿±£³Ö²éѯ¼òµ¥ÇÒÖ»·µ»Ø±ØÐèµÄÊý¾Ý£¬¼õСͨÐżäÊý¾Ý°üµÄ´óСºÍÊýÁ¿ÊÇÒ»¸ö·Ç³£ºÃµÄϰ¹ß£¬ÕâÒ²ÊDzéѯÖо¡Á¿±ÜÃâʹÓÃSELECT *ÒÔ¼°¼ÓÉÏLIMITÏÞÖÆµÄÔ­ÒòÖ®Ò»¡£

²éѯ»º´æ

ÔÚ½âÎöÒ»¸ö²éѯÓï¾äǰ£¬Èç¹û²éѯ»º´æÊÇ´ò¿ªµÄ£¬ÄÇôMySQL»á¼ì²éÕâ¸ö²éѯÓï¾äÊÇ·ñÃüÖвéѯ»º´æÖеÄÊý¾Ý¡£Èç¹ûµ±Ç°²éѯǡºÃÃüÖвéѯ»º´æ£¬ÔÚ¼ì²éÒ»´ÎÓû§È¨ÏÞºóÖ±½Ó·µ»Ø»º´æÖеĽá¹û¡£ÕâÖÖÇé¿öÏ£¬²éѯ²»»á±»½âÎö£¬Ò²²»»áÉú³ÉÖ´Ðмƻ®£¬¸ü²»»áÖ´ÐС£

MySQL½«»º´æ´æ·ÅÔÚÒ»¸öÒýÓÃ±í£¨²»ÒªÀí½â³Étable£¬¿ÉÒÔÈÏΪÊÇÀàËÆÓÚHashMapµÄÊý¾Ý½á¹¹£©£¬Í¨¹ýÒ»¸ö¹þÏ£ÖµË÷Òý£¬Õâ¸ö¹þϣֵͨ¹ý²éѯ±¾Éí¡¢µ±Ç°Òª²éѯµÄÊý¾Ý¿â¡¢¿Í»§¶ËЭÒé°æ±¾ºÅµÈһЩ¿ÉÄÜÓ°Ïì½á¹ûµÄÐÅÏ¢¼ÆËãµÃÀ´¡£ËùÒÔÁ½¸ö²éѯÔÚÈκÎ×Ö·ûÉϵIJ»Í¬£¨ÀýÈ磺¿Õ¸ñ¡¢×¢ÊÍ£©£¬¶¼»áµ¼Ö»º´æ²»»áÃüÖС£

Èç¹û²éѯÖаüº¬ÈκÎÓû§×Ô¶¨Ò庯Êý¡¢´æ´¢º¯Êý¡¢Óû§±äÁ¿¡¢ÁÙʱ±í¡¢mysql¿âÖеÄϵͳ±í£¬Æä²éѯ½á¹û

¶¼²»»á±»»º´æ¡£±ÈÈ纯ÊýNOW()»òÕßCURRENT_DATE()»áÒòΪ²»Í¬µÄ²éѯʱ¼ä£¬·µ»Ø²»Í¬µÄ²éѯ½á¹û£¬ÔÙ±ÈÈç°üº¬CURRENT_USER»òÕßCONNECION_ID()µÄ²éѯÓï¾ä»áÒòΪ²»Í¬µÄÓû§¶ø·µ»Ø²»Í¬µÄ½á¹û£¬½«ÕâÑùµÄ²éѯ½á¹û»º´æÆðÀ´Ã»ÓÐÈκεÄÒâÒå¡£

¼ÈÈ»ÊÇ»º´æ£¬¾Í»áʧЧ£¬ÄDzéѯ»º´æºÎÊ±Ê§Ð§ÄØ£¿MySQLµÄ²éѯ»º´æÏµÍ³»á¸ú×Ù²éѯÖÐÉæ¼°µÄÿ¸ö±í£¬Èç¹ûÕâЩ±í£¨Êý¾Ý»ò½á¹¹£©·¢Éú±ä»¯£¬ÄÇôºÍÕâÕűíÏà¹ØµÄËùÓлº´æÊý¾Ý¶¼½«Ê§Ð§¡£ÕýÒòΪÈç´Ë£¬ÔÚÈκεÄд²Ù×÷ʱ£¬MySQL±ØÐ뽫¶ÔÓ¦±íµÄËùÓлº´æ¶¼ÉèÖÃΪʧЧ¡£Èç¹û²éѯ»º´æ·Ç³£´ó»òÕßË鯬ºÜ¶à£¬Õâ¸ö²Ù×÷¾Í¿ÉÄÜ´øÀ´ºÜ´óµÄϵͳÏûºÄ£¬ÉõÖÁµ¼ÖÂϵͳ½©ËÀÒ»»á¶ù¡£¶øÇÒ²éѯ»º´æ¶ÔϵͳµÄ¶îÍâÏûºÄÒ²²»½ö½öÔÚд²Ù×÷£¬¶Á²Ù×÷Ò²²»ÀýÍ⣺

ÈκεIJéѯÓï¾äÔÚ¿ªÊ¼Ö®Ç°¶¼±ØÐë¾­¹ý¼ì²é£¬¼´Ê¹ÕâÌõSQLÓï¾äÓÀÔ¶²»»áÃüÖлº´æ

Èç¹û²éѯ½á¹û¿ÉÒÔ±»»º´æ£¬ÄÇôִÐÐÍê³Éºó£¬»á½«½á¹û´æÈ뻺´æ£¬Ò²»á´øÀ´¶îÍâµÄϵͳÏûºÄ

»ùÓÚ´Ë£¬ÎÒÃÇÒªÖªµÀ²¢²»ÊÇʲôÇé¿öϲéѯ»º´æ¶¼»áÌá¸ßϵͳÐÔÄÜ£¬»º´æºÍʧЧ¶¼»á´øÀ´¶îÍâÏûºÄ£¬Ö»Óе±»º´æ´øÀ´µÄ×ÊÔ´½ÚÔ¼´óÓÚÆä±¾ÉíÏûºÄµÄ×ÊԴʱ£¬²Å»á¸øÏµÍ³´øÀ´ÐÔÄÜÌáÉý¡£µ«ÒªÈçºÎÆÀ¹À´ò¿ª»º´æÊÇ·ñÄܹ»´øÀ´ÐÔÄÜÌáÉýÊÇÒ»¼þ·Ç³£À§ÄѵÄÊÂÇ飬Ҳ²»ÔÚ±¾ÎÄÌÖÂ۵ķ¶³ëÄÚ¡£Èç¹ûϵͳȷʵ´æÔÚһЩÐÔÄÜÎÊÌ⣬¿ÉÒÔ³¢ÊÔ´ò¿ª²éѯ»º´æ£¬²¢ÔÚÊý¾Ý¿âÉè¼ÆÉÏ×öһЩÓÅ»¯£¬±ÈÈ磺

Óöà¸öС±í´úÌæÒ»¸ö´ó±í£¬×¢Òâ²»Òª¹ý¶ÈÉè¼Æ

ÅúÁ¿²åÈë´úÌæÑ­»·µ¥Ìõ²åÈë

ºÏÀí¿ØÖÆ»º´æ¿Õ¼ä´óС£¬Ò»°ãÀ´ËµÆä´óСÉèÖÃΪ¼¸Ê®ÕױȽϺÏÊÊ

¿ÉÒÔͨ¹ýSQL_CACHEºÍSQL_NO_CACHEÀ´¿ØÖÆÄ³¸ö²éѯÓï¾äÊÇ·ñÐèÒª½øÐлº´æ

×îºóµÄÖÒ¸æÊDz»ÒªÇáÒ×´ò¿ª²éѯ»º´æ£¬ÌرðÊÇдÃܼ¯ÐÍÓ¦Óá£Èç¹ûÄãʵÔÚÊÇÈ̲»×¡£¬¿ÉÒÔ½«query_cache_typeÉèÖÃΪDEMAND£¬ÕâʱֻÓмÓÈëSQL_CACHEµÄ²éѯ²Å»á×ß»º´æ£¬ÆäËû²éѯÔò²»»á£¬ÕâÑù¿ÉÒԷdz£×ÔÓɵؿØÖÆÄÄЩ²éѯÐèÒª±»»º´æ¡£

µ±È»²éѯ»º´æÏµÍ³±¾ÉíÊǷdz£¸´Ôӵģ¬ÕâÀïÌÖÂÛµÄÒ²Ö»ÊǺÜСµÄÒ»²¿·Ö£¬ÆäËû¸üÉîÈëµÄ»°Ì⣬±ÈÈ磺»º´æÊÇÈçºÎʹÓÃÄÚ´æµÄ£¿ÈçºÎ¿ØÖÆÄÚ´æµÄË鯬»¯£¿ÊÂÎñ¶Ô²éѯ»º´æÓкÎÓ°ÏìµÈµÈ£¬¶ÁÕß¿ÉÒÔ×ÔÐÐÔĶÁÏà¹Ø×ÊÁÏ£¬ÕâÀïȨµ±Å×שÒýÓñ°É¡£

Óï·¨½âÎöºÍÔ¤´¦Àí

MySQLͨ¹ý¹Ø¼ü×Ö½«SQLÓï¾ä½øÐнâÎö£¬²¢Éú³ÉÒ»¿Å¶ÔÓ¦µÄ½âÎöÊ÷¡£Õâ¸ö¹ý³Ì½âÎöÆ÷Ö÷Ҫͨ¹ýÓï·¨¹æÔòÀ´ÑéÖ¤ºÍ½âÎö¡£±ÈÈçSQLÖÐÊÇ·ñʹÓÃÁË´íÎóµÄ¹Ø¼ü×Ö»òÕ߹ؼü×ÖµÄ˳ÐòÊÇ·ñÕýÈ·µÈµÈ¡£Ô¤´¦ÀíÔò»á¸ù¾ÝMySQL¹æÔò½øÒ»²½¼ì²é½âÎöÊ÷ÊÇ·ñºÏ·¨¡£±ÈÈç¼ì²éÒª²éѯµÄÊý¾Ý±íºÍÊý¾ÝÁÐÊÇ·ñ´æÔڵȵȡ£

²éѯÓÅ»¯

¾­¹ýÇ°ÃæµÄ²½ÖèÉú³ÉµÄÓï·¨Ê÷±»ÈÏΪÊǺϷ¨µÄÁË£¬²¢ÇÒÓÉÓÅ»¯Æ÷½«Æäת»¯³É²éѯ¼Æ»®¡£¶àÊýÇé¿öÏ£¬Ò»Ìõ²éѯ¿ÉÒÔÓкܶàÖÖÖ´Ðз½Ê½£¬×îºó¶¼·µ»ØÏàÓ¦µÄ½á¹û¡£ÓÅ»¯Æ÷µÄ×÷ÓþÍÊÇÕÒµ½ÕâÆäÖÐ×îºÃµÄÖ´Ðмƻ®¡£

MySQLʹÓûùÓڳɱ¾µÄÓÅ»¯Æ÷£¬Ëü³¢ÊÔÔ¤²âÒ»¸ö²éѯʹÓÃijÖÖÖ´Ðмƻ®Ê±µÄ³É±¾£¬²¢Ñ¡ÔñÆäÖгɱ¾×îСµÄÒ»¸ö¡£ÔÚMySQL¿ÉÒÔͨ¹ý²éѯµ±Ç°»á»°µÄlast_query_costµÄÖµÀ´µÃµ½Æä¼ÆË㵱ǰ²éѯµÄ³É±¾¡£

mysql> select * from t_message limit 10;
...Ê¡ÂÔ½á¹û¼¯

mysql> show status like 'last_query_cost';
+-----------------+-------------+
| Variable_name | Value |
+-----------------+-------------+
| Last_query_cost | 6391.799000 |
+-----------------+-------------+

ʾÀýÖеĽá¹û±íʾÓÅ»¯Æ÷ÈÏΪ´ó¸ÅÐèÒª×ö6391¸öÊý¾ÝÒ³µÄËæ»ú²éÕÒ²ÅÄÜÍê³ÉÉÏÃæµÄ²éѯ¡£Õâ¸ö½á¹ûÊǸù¾ÝһЩÁеÄͳ¼ÆÐÅÏ¢¼ÆËãµÃÀ´µÄ£¬ÕâЩͳ¼ÆÐÅÏ¢°üÀ¨£ºÃ¿Õűí»òÕßË÷ÒýµÄÒ³Ãæ¸öÊý¡¢Ë÷ÒýµÄ»ùÊý¡¢Ë÷ÒýºÍÊý¾ÝÐеij¤¶È¡¢Ë÷ÒýµÄ·Ö²¼Çé¿öµÈµÈ¡£

Óзdz£¶àµÄÔ­Òò»áµ¼ÖÂMySQLÑ¡Ôñ´íÎóµÄÖ´Ðмƻ®£¬±ÈÈçͳ¼ÆÐÅÏ¢²»×¼È·¡¢²»»á¿¼ÂDz»ÊÜÆä¿ØÖÆµÄ²Ù×÷³É±¾£¨Óû§×Ô¶¨Ò庯Êý¡¢´æ´¢¹ý³Ì£©¡¢MySQLÈÏΪµÄ×îÓŸúÎÒÃÇÏëµÄ²»Ò»Ñù£¨ÎÒÃÇÏ£ÍûÖ´ÐÐʱ¼ä¾¡¿ÉẠ̈ܶ¬µ«MySQLֵѡÔñËüÈÏΪ³É±¾Ð¡µÄ£¬µ«³É±¾Ð¡²¢²»Òâζ×ÅÖ´ÐÐʱ¼ä¶Ì£©µÈµÈ¡£

MySQLµÄ²éѯÓÅ»¯Æ÷ÊÇÒ»¸ö·Ç³£¸´ÔӵIJ¿¼þ£¬ËüʹÓÃÁ˷dz£¶àµÄÓÅ»¯²ßÂÔÀ´Éú³ÉÒ»¸ö×îÓŵÄÖ´Ðмƻ®£º

ÖØÐ¶¨Òå±íµÄ¹ØÁªË³Ðò£¨¶àÕÅ±í¹ØÁª²éѯʱ£¬²¢²»Ò»¶¨°´ÕÕSQLÖÐÖ¸¶¨µÄ˳Ðò½øÐУ¬µ«ÓÐһЩ¼¼ÇÉ¿ÉÒÔÖ¸¶¨¹ØÁªË³Ðò£©

ÓÅ»¯MIN()ºÍMAX()º¯Êý£¨ÕÒijÁеÄ×îСֵ£¬Èç¹û¸ÃÁÐÓÐË÷Òý£¬Ö»ÐèÒª²éÕÒB+TreeË÷Òý×î×ó¶Ë£¬·´Ö®Ôò¿ÉÒÔÕÒµ½×î´óÖµ£¬¾ßÌåÔ­Àí¼ûÏÂÎÄ£©

ÌáǰÖÕÖ¹²éѯ£¨±ÈÈ磺ʹÓÃLimitʱ£¬²éÕÒµ½Âú×ãÊýÁ¿µÄ½á¹û¼¯ºó»áÁ¢¼´ÖÕÖ¹²éѯ£©

ÓÅ»¯ÅÅÐò£¨ÔÚÀϰ汾MySQL»áʹÓÃÁ½´Î´«ÊäÅÅÐò£¬¼´ÏȶÁÈ¡ÐÐÖ¸ÕëºÍÐèÒªÅÅÐòµÄ×Ö¶ÎÔÚÄÚ´æÖÐ¶ÔÆäÅÅÐò£¬È»ºóÔÙ¸ù¾ÝÅÅÐò½á¹ûÈ¥¶ÁÈ¡Êý¾ÝÐУ¬¶øÐ°汾²ÉÓõÄÊǵ¥´Î´«ÊäÅÅÐò£¬Ò²¾ÍÊÇÒ»´Î¶ÁÈ¡ËùÓеÄÊý¾ÝÐУ¬È»ºó¸ù¾Ý¸ø¶¨µÄÁÐÅÅÐò¡£¶ÔÓÚI/OÃܼ¯ÐÍÓ¦Óã¬Ð§ÂÊ»á¸ßºÜ¶à£©

Ëæ×ÅMySQLµÄ²»¶Ï·¢Õ¹£¬ÓÅ»¯Æ÷ʹÓõÄÓÅ»¯²ßÂÔÒ²ÔÚ²»¶ÏµÄ½ø»¯£¬ÕâÀï½ö½ö½éÉܼ¸¸ö·Ç³£³£ÓÃÇÒÈÝÒ×Àí½âµÄÓÅ»¯²ßÂÔ£¬ÆäËûµÄÓÅ»¯²ßÂÔ£¬´ó¼Ò×ÔÐвéÔİɡ£

²éѯִÐÐÒýÇæ

ÔÚÍê³É½âÎöºÍÓÅ»¯½×¶ÎÒÔºó£¬MySQL»áÉú³É¶ÔÓ¦µÄÖ´Ðмƻ®£¬²éѯִÐÐÒýÇæ¸ù¾ÝÖ´Ðмƻ®¸ø³öµÄÖ¸ÁîÖð²½Ö´Ðеóö½á¹û¡£Õû¸öÖ´Ðйý³ÌµÄ´ó²¿·Ö²Ù×÷¾ùÊÇͨ¹ýµ÷Óô洢ÒýÇæÊµÏֵĽӿÚÀ´Íê³É£¬ÕâЩ½Ó¿Ú±»³ÆÎªhandler API¡£²éѯ¹ý³ÌÖеÄÿһÕűíÓÉÒ»¸öhandlerʵÀý±íʾ¡£Êµ¼ÊÉÏ£¬MySQLÔÚ²éѯÓÅ»¯½×¶Î¾ÍΪÿһÕÅ±í´´½¨ÁËÒ»¸öhandlerʵÀý£¬ÓÅ»¯Æ÷¿ÉÒÔ¸ù¾ÝÕâЩʵÀýµÄ½Ó¿ÚÀ´»ñÈ¡±íµÄÏà¹ØÐÅÏ¢£¬°üÀ¨±íµÄËùÓÐÁÐÃû¡¢Ë÷Òýͳ¼ÆÐÅÏ¢µÈ¡£´æ´¢ÒýÇæ½Ó¿ÚÌṩÁ˷dz£·á¸»µÄ¹¦ÄÜ£¬µ«Æäµ×²ã½öÓм¸Ê®¸ö½Ó¿Ú£¬ÕâЩ½Ó¿ÚÏñ´î»ýľһÑùÍê³ÉÁËÒ»´Î²éѯµÄ´ó²¿·Ö²Ù×÷¡£

·µ»Ø½á¹û¸ø¿Í»§¶Ë

²éѯִÐеÄ×îºóÒ»¸ö½×¶Î¾ÍÊǽ«½á¹û·µ»Ø¸ø¿Í»§¶Ë¡£¼´Ê¹²éѯ²»µ½Êý¾Ý£¬MySQLÈÔÈ»»á·µ»ØÕâ¸ö²éѯµÄÏà¹ØÐÅÏ¢£¬±ÈÈç¸Ã²éѯӰÏìµ½µÄÐÐÊýÒÔ¼°Ö´ÐÐʱ¼äµÈµÈ¡£

Èç¹û²éѯ»º´æ±»´ò¿ªÇÒÕâ¸ö²éѯ¿ÉÒÔ±»»º´æ£¬MySQLÒ²»á½«½á¹û´æ·Åµ½»º´æÖС£

½á¹û¼¯·µ»Ø¿Í»§¶ËÊÇÒ»¸öÔöÁ¿ÇÒÖð²½·µ»ØµÄ¹ý³Ì¡£ÓпÉÄÜMySQLÔÚÉú³ÉµÚÒ»Ìõ½á¹ûʱ£¬¾Í¿ªÊ¼Ïò¿Í»§¶ËÖð²½·µ»Ø½á¹û¼¯ÁË¡£ÕâÑù·þÎñ¶Ë¾ÍÎÞÐë´æ´¢Ì«¶à½á¹û¶øÏûºÄ¹ý¶àÄڴ棬Ҳ¿ÉÒÔÈÿͻ§¶ËµÚһʱ¼ä»ñµÃ·µ»Ø½á¹û¡£ÐèҪעÒâµÄÊÇ£¬½á¹û¼¯ÖеÄÿһÐж¼»áÒÔÒ»¸öÂú×ã¢ÙÖÐËùÃèÊöµÄͨÐÅЭÒéµÄÊý¾Ý°ü·¢ËÍ£¬ÔÙͨ¹ýTCPЭÒé½øÐд«Ê䣬ÔÚ´«Êä¹ý³ÌÖУ¬¿ÉÄܶÔMySQLµÄÊý¾Ý°ü½øÐлº´æÈ»ºóÅúÁ¿·¢ËÍ¡£

»ØÍ·×ܽáÒ»ÏÂMySQLÕû¸ö²éѯִÐйý³Ì£¬×ܵÄÀ´Ëµ·ÖΪ6¸ö²½Ö裺

¿Í»§¶ËÏòMySQL·þÎñÆ÷·¢ËÍÒ»Ìõ²éѯÇëÇó

·þÎñÆ÷Ê×Ïȼì²é²éѯ»º´æ£¬Èç¹ûÃüÖлº´æ£¬ÔòÁ¢¿Ì·µ»Ø´æ´¢ÔÚ»º´æÖеĽá¹û¡£·ñÔò½øÈëÏÂÒ»½×¶Î

·þÎñÆ÷½øÐÐSQL½âÎö¡¢Ô¤´¦Àí¡¢ÔÙÓÉÓÅ»¯Æ÷Éú³É¶ÔÓ¦µÄÖ´Ðмƻ®

MySQL¸ù¾ÝÖ´Ðмƻ®£¬µ÷Óô洢ÒýÇæµÄAPIÀ´Ö´Ðвéѯ

½«½á¹û·µ»Ø¸ø¿Í»§¶Ë£¬Í¬Ê±»º´æ²éѯ½á¹û

ÐÔÄÜÓÅ»¯½¨Òé

¿´ÁËÕâô¶à£¬Äã¿ÉÄÜ»áÆÚ´ý¸ø³öһЩÓÅ»¯ÊֶΣ¬Êǵģ¬ÏÂÃæ»á´Ó3¸ö²»Í¬·½Ãæ¸ø³öһЩÓÅ»¯½¨Òé¡£µ«ÇëµÈµÈ£¬»¹ÓÐÒ»¾äÖÒ¸æÒªÏÈË͸øÄ㣺²»ÒªÌýÐÅÄã¿´µ½µÄ¹ØÓÚÓÅ»¯µÄ¡°¾ø¶ÔÕæÀí¡±£¬°üÀ¨±¾ÎÄËùÌÖÂÛµÄÄÚÈÝ£¬¶øÓ¦¸ÃÊÇÔÚʵ¼ÊµÄÒµÎñ³¡¾°ÏÂͨ¹ý²âÊÔÀ´ÑéÖ¤Äã¹ØÓÚÖ´Ðмƻ®ÒÔ¼°ÏìӦʱ¼äµÄ¼ÙÉè¡£

SchemeÉè¼ÆÓëÊý¾ÝÀàÐÍÓÅ»¯

Ñ¡ÔñÊý¾ÝÀàÐÍÖ»Òª×ñѭС¶ø¼òµ¥µÄÔ­Ôò¾ÍºÃ£¬Ô½Ð¡µÄÊý¾ÝÀàÐÍͨ³£»á¸ü¿ì£¬Õ¼ÓøüÉٵĴÅÅÌ¡¢Äڴ棬´¦ÀíʱÐèÒªµÄCPUÖÜÆÚÒ²¸üÉÙ¡£Ô½¼òµ¥µÄÊý¾ÝÀàÐÍÔÚ¼ÆËãʱÐèÒª¸üÉÙµÄCPUÖÜÆÚ£¬±ÈÈ磬ÕûÐ;ͱÈ×Ö·û²Ù×÷´ú¼ÛµÍ£¬Òò¶ø»áʹÓÃÕûÐÍÀ´´æ´¢ipµØÖ·£¬Ê¹ÓÃDATETIMEÀ´´æ´¢Ê±¼ä£¬¶ø²»ÊÇʹÓÃ×Ö·û´®¡£

ÕâÀï×ܽἸ¸ö¿ÉÄÜÈÝÒ×Àí½â´íÎóµÄ¼¼ÇÉ£º

ͨ³£À´Ëµ°Ñ¿ÉΪNULLµÄÁиÄΪNOT NULL²»»á¶ÔÐÔÄÜÌáÉýÓжàÉÙ°ïÖú£¬Ö»ÊÇÈç¹û¼Æ»®ÔÚÁÐÉÏ´´½¨Ë÷Òý£¬¾ÍÓ¦¸Ã½«¸ÃÁÐÉèÖÃΪNOT NULL¡£

¶ÔÕûÊýÀàÐÍÖ¸¶¨¿í¶È£¬±ÈÈçINT(11)£¬Ã»ÓÐÈκÎÂÑÓá£INTʹÓÃ32루4¸ö×Ö½Ú£©´æ´¢¿Õ¼ä£¬ÄÇôËüµÄ±íʾ·¶Î§ÒѾ­È·¶¨£¬ËùÒÔINT(1)ºÍINT(20)¶ÔÓÚ´æ´¢ºÍ¼ÆËãÊÇÏàͬµÄ¡£

UNSIGNED±íʾ²»ÔÊÐí¸ºÖµ£¬´óÖ¿ÉÒÔʹÕýÊýµÄÉÏÏÞÌá¸ßÒ»±¶¡£±ÈÈçTINYINT´æ´¢·¶Î§ÊÇ-128 ~ 127£¬¶øUNSIGNED TINYINT´æ´¢µÄ·¶Î§È´ÊÇ0 - 255¡£

ͨ³£À´½²£¬Ã»ÓÐÌ«´óµÄ±ØÒªÊ¹ÓÃDECIMALÊý¾ÝÀàÐÍ¡£¼´Ê¹ÊÇÔÚÐèÒª´æ´¢²ÆÎñÊý¾Ýʱ£¬ÈÔÈ»¿ÉÒÔʹÓÃBIGINT¡£±ÈÈçÐèÒª¾«È·µ½Íò·ÖÖ®Ò»£¬ÄÇô¿ÉÒÔ½«Êý¾Ý³ËÒÔÒ»°ÙÍòÈ»ºóʹÓÃBIGINT´æ´¢¡£ÕâÑù¿ÉÒÔ±ÜÃ⸡µãÊý¼ÆË㲻׼ȷºÍDECIMAL¾«È·¼ÆËã´ú¼Û¸ßµÄÎÊÌâ¡£

TIMESTAMPʹÓÃ4¸ö×Ö½Ú´æ´¢¿Õ¼ä£¬DATETIMEʹÓÃ8¸ö×Ö½Ú´æ´¢¿Õ¼ä¡£Òò¶ø£¬TIMESTAMPÖ»Äܱíʾ1970 - 2038Ä꣬±ÈDATETIME±íʾµÄ·¶Î§Ð¡µÃ¶à£¬¶øÇÒTIMESTAMPµÄÖµÒòÊ±Çø²»Í¬¶ø²»Í¬¡£

´ó¶àÊýÇé¿öÏÂûÓÐʹÓÃö¾ÙÀàÐ͵ıØÒª£¬ÆäÖÐÒ»¸öȱµãÊÇö¾ÙµÄ×Ö·û´®ÁбíÊǹ̶¨µÄ£¬Ìí¼ÓºÍɾ³ý×Ö·û´®£¨Ã¶¾ÙÑ¡Ï±ØÐëʹÓÃALTER TABLE£¨Èç¹ûÖ»ÊÇÔÚÁбíĩβ׷¼ÓÔªËØ£¬²»ÐèÒªÖØ½¨±í£©¡£

schemaµÄÁв»ÒªÌ«¶à¡£Ô­ÒòÊÇ´æ´¢ÒýÇæµÄAPI¹¤×÷ʱÐèÒªÔÚ·þÎñÆ÷²ãºÍ´æ´¢ÒýÇæ²ãÖ®¼äͨ¹ýÐлº³å¸ñʽ¿½±´Êý¾Ý£¬È»ºóÔÚ·þÎñÆ÷²ã½«»º³åÄÚÈݽâÂë³É¸÷¸öÁУ¬Õâ¸öת»»¹ý³ÌµÄ´ú¼ÛÊǷdz£¸ßµÄ¡£Èç¹ûÁÐÌ«¶à¶øÊµ¼ÊʹÓõÄÁÐÓÖºÜÉٵϰ£¬ÓпÉÄܻᵼÖÂCPUÕ¼Óùý¸ß¡£

´ó±íALTER TABLE·Ç³£ºÄʱ£¬MySQLÖ´Ðд󲿷ÖÐ޸ıí½á¹û²Ù×÷µÄ·½·¨ÊÇÓÃеĽṹ´´½¨Ò»¸öÕÅ¿Õ±í£¬´Ó¾É±íÖвé³öËùÓеÄÊý¾Ý²åÈëÐÂ±í£¬È»ºóÔÙɾ³ý¾É±í¡£ÓÈÆäµ±ÄÚ´æ²»×ã¶ø±íÓֺܴ󣬶øÇÒ»¹ÓкܴóË÷ÒýµÄÇé¿öÏ£¬ºÄʱ¸ü¾Ã¡£µ±È»ÓÐÒ»Ð©Ææ¼¼ÒùÇÉ¿ÉÒÔ½â¾öÕâ¸öÎÊÌ⣬ÓÐÐËȤ¿É×ÔÐвéÔÄ¡£

´´½¨¸ßÐÔÄÜË÷Òý

Ë÷ÒýÊÇÌá¸ßMySQL²éѯÐÔÄܵÄÒ»¸öÖØÒªÍ¾¾¶£¬µ«¹ý¶àµÄË÷Òý¿ÉÄܻᵼÖ¹ý¸ßµÄ´ÅÅÌʹÓÃÂÊÒÔ¼°¹ý¸ßµÄÄÚ´æÕ¼Ó㬴ӶøÓ°ÏìÓ¦ÓóÌÐòµÄÕûÌåÐÔÄÜ¡£Ó¦µ±¾¡Á¿±ÜÃâʺó²ÅÏëÆðÌí¼ÓË÷Òý£¬ÒòΪʺó¿ÉÄÜÐèÒª¼à¿Ø´óÁ¿µÄSQL²ÅÄܶ¨Î»µ½ÎÊÌâËùÔÚ£¬¶øÇÒÌí¼ÓË÷ÒýµÄʱ¼ä¿Ï¶¨ÊÇÔ¶´óÓÚ³õʼÌí¼ÓË÷ÒýËùÐèÒªµÄʱ¼ä£¬¿É¼ûË÷ÒýµÄÌí¼ÓÒ²ÊǷdz£Óм¼Êõº¬Á¿µÄ¡£

½ÓÏÂÀ´½«ÏòÄãչʾһϵÁд´½¨¸ßÐÔÄÜË÷ÒýµÄ²ßÂÔ£¬ÒÔ¼°Ã¿Ìõ²ßÂÔÆä±³ºóµÄ¹¤×÷Ô­Àí¡£µ«ÔÚ´Ë֮ǰ£¬ÏÈÁ˽âÓëË÷ÒýÏà¹ØµÄһЩËã·¨ºÍÊý¾Ý½á¹¹£¬½«ÓÐÖúÓÚ¸üºÃµÄÀí½âºóÎĵÄÄÚÈÝ¡£

Ë÷ÒýÏà¹ØµÄÊý¾Ý½á¹¹ºÍËã·¨

ͨ³£ÎÒÃÇËù˵µÄË÷ÒýÊÇÖ¸B-TreeË÷Òý£¬ËüÊÇĿǰ¹ØÏµÐÍÊý¾Ý¿âÖвéÕÒÊý¾Ý×îΪ³£ÓúÍÓÐЧµÄË÷Òý£¬´ó¶àÊý´æ´¢ÒýÇæ¶¼Ö§³ÖÕâÖÖË÷Òý¡£Ê¹ÓÃB-TreeÕâ¸öÊõÓÊÇÒòΪMySQLÔÚCREATE TABLE»òÆäËüÓï¾äÖÐʹÓÃÁËÕâ¸ö¹Ø¼ü×Ö£¬µ«Êµ¼ÊÉϲ»Í¬µÄ´æ´¢ÒýÇæ¿ÉÄÜʹÓò»Í¬µÄÊý¾Ý½á¹¹£¬±ÈÈçInnoDB¾ÍÊÇʹÓõÄB+Tree¡£

B+TreeÖеÄBÊÇÖ¸balance£¬ÒâΪƽºâ¡£ÐèҪעÒâµÄÊÇ£¬B+Ê÷Ë÷Òý²¢²»ÄÜÕÒµ½Ò»¸ö¸ø¶¨¼üÖµµÄ¾ßÌåÐУ¬ËüÕÒµ½µÄÖ»ÊDZ»²éÕÒÊý¾ÝÐÐËùÔÚµÄÒ³£¬½Ó×ÅÊý¾Ý¿â»á°ÑÒ³¶ÁÈëµ½Äڴ棬ÔÙÔÚÄÚ´æÖнøÐвéÕÒ£¬×îºóµÃµ½Òª²éÕÒµÄÊý¾Ý¡£

ÔÚ½éÉÜB+Treeǰ£¬ÏÈÁ˽âһ϶þ²æ²éÕÒÊ÷£¬ËüÊÇÒ»ÖÖ¾­µäµÄÊý¾Ý½á¹¹£¬Æä×ó×ÓÊ÷µÄÖµ×ÜÊÇСÓÚ¸ùµÄÖµ£¬ÓÒ×ÓÊ÷µÄÖµ×ÜÊÇ´óÓÚ¸ùµÄÖµ£¬ÈçÏÂͼ¢Ù¡£Èç¹ûÒªÔÚÕâ¿ÎÊ÷ÖвéÕÒֵΪ5µÄ¼Ç¼£¬Æä´óÖÂÁ÷³Ì£ºÏÈÕÒµ½¸ù£¬ÆäֵΪ6£¬´óÓÚ5£¬ËùÒÔ²éÕÒ×ó×ÓÊ÷£¬ÕÒµ½3£¬¶ø5´óÓÚ3£¬½Ó×ÅÕÒ3µÄÓÒ×ÓÊ÷£¬×ܹ²ÕÒÁË3´Î¡£Í¬ÑùµÄ·½·¨£¬Èç¹û²éÕÒֵΪ8µÄ¼Ç¼£¬Ò²ÐèÒª²éÕÒ3´Î¡£ËùÒÔ¶þ²æ²éÕÒÊ÷µÄƽ¾ù²éÕÒ´ÎÊýΪ(3 + 3 + 3 + 2 + 2 + 1) / 6 = 2.3´Î£¬¶øË³Ðò²éÕҵϰ£¬²éÕÒֵΪ2µÄ¼Ç¼£¬½öÐèÒª1´Î£¬µ«²éÕÒֵΪ8µÄ¼Ç¼ÔòÐèÒª6´Î£¬ËùÒÔ˳Ðò²éÕ񵀮½¾ù²éÕÒ´ÎÊýΪ£º(1 + 2 + 3 + 4 + 5 + 6) / 6 = 3.3´Î£¬Òò´Ë´ó¶àÊýÇé¿ö϶þ²æ²éÕÒÊ÷µÄƽ¾ù²éÕÒËٶȱÈ˳Ðò²éÕÒÒª¿ì¡£

ÓÉÓÚ¶þ²æ²éÕÒÊ÷¿ÉÒÔÈÎÒâ¹¹Ô죬ͬÑùµÄÖµ£¬¿ÉÒÔ¹¹Ôì³öÈçͼ¢ÚµÄ¶þ²æ²éÕÒÊ÷£¬ÏÔÈ»Õâ¿Ã¶þ²æÊ÷µÄ²éѯЧÂʺÍ˳Ðò²éÕҲ¶à¡£ÈôÏë¶þ²æ²éÕÒÊýµÄ²éѯÐÔÄÜ×î¸ß£¬ÐèÒªÕâ¿Ã¶þ²æ²éÕÒÊ÷ÊÇÆ½ºâµÄ£¬Ò²¼´Æ½ºâ¶þ²æÊ÷£¨AVLÊ÷£©¡£

ƽºâ¶þ²æÊ÷Ê×ÏÈÐèÒª·ûºÏ¶þ²æ²éÕÒÊ÷µÄ¶¨Ò壬Æä´Î±ØÐëÂú×ãÈκνڵãµÄÁ½¸ö×ÓÊ÷µÄ¸ß¶È²î²»ÄÜ´óÓÚ1¡£ÏÔȻͼ¢Ú²»Âú×ãÆ½ºâ¶þ²æÊ÷µÄ¶¨Ò壬¶øÍ¼¢ÙÊÇÒ»¿Îƽºâ¶þ²æÊ÷¡£Æ½ºâ¶þ²æÊ÷µÄ²éÕÒÐÔÄÜÊDZȽϸߵģ¨ÐÔÄÜ×îºÃµÄÊÇ×îÓŶþ²æÊ÷£©£¬²éѯÐÔÄÜÔ½ºÃ£¬Î¬»¤µÄ³É±¾¾ÍÔ½´ó¡£±ÈÈçͼ¢ÙµÄƽºâ¶þ²æÊ÷£¬µ±Óû§ÐèÒª²åÈëÒ»¸öеÄÖµ9µÄ½Úµãʱ£¬¾ÍÐèÒª×ö³öÈçϱ䶯¡£

ͨ¹ýÒ»´Î×óÐý²Ù×÷¾Í½«²åÈëºóµÄÊ÷ÖØÐ±äΪƽºâ¶þ²æÊ÷ÊÇ×î¼òµ¥µÄÇé¿öÁË£¬Êµ¼ÊÓ¦Óó¡¾°ÖпÉÄÜÐèÒªÐýת¶à´Î¡£ÖÁ´ËÎÒÃÇ¿ÉÒÔ¿¼ÂÇÒ»¸öÎÊÌ⣬ƽºâ¶þ²æÊ÷µÄ²éÕÒЧÂÊ»¹²»´í£¬ÊµÏÖÒ²·Ç³£¼òµ¥£¬ÏàÓ¦µÄά»¤³É±¾»¹ÄܽÓÊÜ£¬ÎªÊ²Ã´MySQLË÷Òý²»Ö±½ÓʹÓÃÆ½ºâ¶þ²æÊ÷£¿

Ëæ×ÅÊý¾Ý¿âÖÐÊý¾ÝµÄÔö¼Ó£¬Ë÷Òý±¾Éí´óÐ¡ËæÖ®Ôö¼Ó£¬²»¿ÉÄÜÈ«²¿´æ´¢ÔÚÄÚ´æÖУ¬Òò´ËË÷ÒýÍùÍùÒÔË÷ÒýÎļþµÄÐÎʽ´æ´¢µÄ´ÅÅÌÉÏ¡£ÕâÑùµÄ»°£¬Ë÷Òý²éÕÒ¹ý³ÌÖоÍÒª²úÉú´ÅÅÌI/OÏûºÄ£¬Ïà¶ÔÓÚÄÚ´æ´æÈ¡£¬I/O´æÈ¡µÄÏûºÄÒª¸ß¼¸¸öÊýÁ¿¼¶¡£¿ÉÒÔÏëÏóÒ»ÏÂÒ»¿Ã¼¸°ÙÍò½ÚµãµÄ¶þ²æÊ÷µÄÉî¶ÈÊǶàÉÙ£¿Èç¹û½«Õâô´óÉî¶ÈµÄÒ»¿Å¶þ²æÊ÷·Å´ÅÅÌÉÏ£¬Ã¿¶Áȡһ¸ö½Úµã£¬ÐèÒªÒ»´Î´ÅÅ̵ÄI/O¶ÁÈ¡£¬Õû¸ö²éÕҵĺÄʱÏÔÈ»ÊDz»Äܹ»½ÓÊܵġ£ÄÇôÈçºÎ¼õÉÙ²éÕÒ¹ý³ÌÖеÄI/O´æÈ¡´ÎÊý£¿

Ò»ÖÖÐÐÖ®ÓÐЧµÄ½â¾ö·½·¨ÊǼõÉÙÊ÷µÄÉî¶È£¬½«¶þ²æÊ÷±äΪm²æÊ÷£¨¶à·ËÑË÷Ê÷£©£¬¶øB+Tree¾ÍÊÇÒ»ÖÖ¶à·ËÑË÷Ê÷¡£Àí½âB+Treeʱ£¬Ö»ÐèÒªÀí½âÆä×îÖØÒªµÄÁ½¸öÌØÕ÷¼´¿É£ºµÚÒ»£¬ËùÓеĹؼü×Ö£¨¿ÉÒÔÀí½âΪÊý¾Ý£©¶¼´æ´¢ÔÚÒ¶×ӽڵ㣨Leaf Page£©£¬·ÇÒ¶×ӽڵ㣨Index Page£©²¢²»´æ´¢ÕæÕýµÄÊý¾Ý£¬ËùÓмǼ½Úµã¶¼Êǰ´¼üÖµ´óС˳Ðò´æ·ÅÔÚͬһ²ãÒ¶×Ó½ÚµãÉÏ¡£Æä´Î£¬ËùÓеÄÒ¶×Ó½ÚµãÓÉÖ¸ÕëÁ¬½Ó¡£ÈçÏÂͼΪ¸ß¶ÈΪ2µÄ¼ò»¯Á˵ÄB+Tree¡£

ÔõôÀí½âÕâÁ½¸öÌØÕ÷£¿MySQL½«Ã¿¸ö½ÚµãµÄ´óСÉèÖÃΪһ¸öÒ³µÄÕûÊý±¶£¨Ô­ÒòÏÂÎÄ»á½éÉÜ£©£¬Ò²¾ÍÊÇÔÚ½Úµã¿Õ¼ä´óСһ¶¨µÄÇé¿öÏ£¬Ã¿¸ö½Úµã¿ÉÒÔ´æ´¢¸ü¶àµÄÄÚ½áµã£¬ÕâÑùÿ¸ö½áµãÄÜË÷ÒýµÄ·¶Î§¸ü´ó¸ü¾«È·¡£ËùÓеÄÒ¶×Ó½ÚµãʹÓÃÖ¸ÕëÁ´½ÓµÄºÃ´¦ÊÇ¿ÉÒÔ½øÐÐÇø¼ä·ÃÎÊ£¬±ÈÈçÉÏͼÖУ¬Èç¹û²éÕÒ´óÓÚ20¶øÐ¡ÓÚ30µÄ¼Ç¼£¬Ö»ÐèÒªÕÒµ½½Úµã20£¬¾Í¿ÉÒÔ±éÀúÖ¸ÕëÒÀ´ÎÕÒµ½25¡¢30¡£Èç¹ûûÓÐÁ´½ÓÖ¸ÕëµÄ»°£¬¾ÍÎÞ·¨½øÐÐÇø¼ä²éÕÒ¡£ÕâÒ²ÊÇMySQLʹÓÃB+Tree×÷ΪË÷Òý´æ´¢½á¹¹µÄÖØÒªÔ­Òò¡£

MySQLΪºÎ½«½Úµã´óСÉèÖÃΪҳµÄÕûÊý±¶£¬Õâ¾ÍÐèÒªÀí½â´ÅÅ̵Ĵ洢ԭÀí¡£´ÅÅ̱¾Éí´æÈ¡¾Í±ÈÖ÷´æÂýºÜ¶à£¬ÔÚ¼ÓÉÏ»úеÔ˶¯ËðºÄ£¨ÌرðÊÇÆÕͨµÄ»úеӲÅÌ£©£¬´ÅÅ̵ĴæÈ¡ËÙ¶ÈÍùÍùÊÇÖ÷´æµÄ¼¸°ÙÍò·ÖÖ®Ò»£¬ÎªÁ˾¡Á¿¼õÉÙ´ÅÅÌI/O£¬´ÅÅÌÍùÍù²»ÊÇÑϸñ°´Ðè¶ÁÈ¡£¬¶øÊÇÿ´Î¶¼»áÔ¤¶Á£¬¼´Ê¹Ö»ÐèÒªÒ»¸ö×Ö½Ú£¬´ÅÅÌÒ²»á´ÓÕâ¸öλÖÿªÊ¼£¬Ë³ÐòÏòºó¶Áȡһ¶¨³¤¶ÈµÄÊý¾Ý·ÅÈëÄڴ棬Ԥ¶ÁµÄ³¤¶ÈÒ»°ãΪҳµÄÕûÊý±¶¡£

Ò³ÊǼÆËã»ú¹ÜÀí´æ´¢Æ÷µÄÂß¼­¿é£¬Ó²¼þ¼°OSÍùÍù½«Ö÷´æºÍ´ÅÅÌ´æ´¢Çø·Ö¸îΪÁ¬ÐøµÄ´óСÏàµÈµÄ¿é£¬Ã¿¸ö´æ´¢¿é³ÆÎªÒ»Ò³£¨Ðí¶àOSÖУ¬Ò³µÄ´óСͨ³£Îª4K£©¡£Ö÷´æºÍ´ÅÅÌÒÔҳΪµ¥Î»½»»»Êý¾Ý¡£µ±³ÌÐòÒª¶ÁÈ¡µÄÊý¾Ý²»ÔÚÖ÷´æÖÐʱ£¬»á´¥·¢Ò»¸öȱҳÒì³££¬´Ëʱϵͳ»áÏò´ÅÅÌ·¢³ö¶ÁÅÌÐźţ¬´ÅÅÌ»áÕÒµ½Êý¾ÝµÄÆðʼλÖò¢ÏòºóÁ¬Ðø¶Áȡһҳ»ò¼¸Ò³ÔØÈëÄÚ´æÖУ¬È»ºóÒ»Æð·µ»Ø£¬³ÌÐò¼ÌÐøÔËÐС£

MySQLÇÉÃîÀûÓÃÁË´ÅÅÌÔ¤¶ÁÔ­Àí£¬½«Ò»¸ö½ÚµãµÄ´óСÉèΪµÈÓÚÒ»¸öÒ³£¬ÕâÑùÿ¸ö½ÚµãÖ»ÐèÒªÒ»´ÎI/O¾Í¿ÉÒÔÍêÈ«ÔØÈ롣ΪÁË´ïµ½Õâ¸öÄ¿µÄ£¬Ã¿´Îн¨½Úµãʱ£¬Ö±½ÓÉêÇëÒ»¸öÒ³µÄ¿Õ¼ä£¬ÕâÑù¾Í±£Ö¤Ò»¸ö½ÚµãÎïÀíÉÏÒ²´æ´¢ÔÚÒ»¸öÒ³À¼ÓÖ®¼ÆËã»ú´æ´¢·ÖÅä¶¼Êǰ´Ò³¶ÔÆëµÄ£¬¾ÍʵÏÖÁ˶Áȡһ¸ö½ÚµãÖ»ÐèÒ»´ÎI/O¡£¼ÙÉèB+TreeµÄ¸ß¶ÈΪh£¬Ò»´Î¼ìË÷×î¶àÐèÒªh-1´ÎI/O£¨¸ù½Úµã³£×¤Äڴ棩£¬¸´ÔÓ¶ÈO(h) = O(logmN)¡£Êµ¼ÊÓ¦Óó¡¾°ÖУ¬Mͨ³£½Ï´ó£¬³£³£³¬¹ý100£¬Òò´ËÊ÷µÄ¸ß¶ÈÒ»°ã¶¼±È½ÏС£¬Í¨³£²»³¬¹ý3¡£

×îºó¼òµ¥Á˽âÏÂB+Tree½ÚµãµÄ²Ù×÷£¬ÔÚÕûÌåÉ϶ÔË÷ÒýµÄά»¤ÓÐÒ»¸ö´ó¸ÅµÄÁ˽⣬ËäÈ»Ë÷Òý¿ÉÒÔ´ó´óÌá¸ß²éѯЧÂÊ£¬µ«Î¬»¤Ë÷ÒýÈÔÒª»¨·ÑºÜ´óµÄ´ú¼Û£¬Òò´ËºÏÀíµÄ´´½¨Ë÷ÒýÒ²¾ÍÓÈÎªÖØÒª¡£

ÈÔÒÔÉÏÃæµÄÊ÷ΪÀý£¬ÎÒÃǼÙÉèÿ¸ö½ÚµãÖ»ÄÜ´æ´¢4¸öÄڽڵ㡣Ê×ÏÈÒª²åÈëµÚÒ»¸ö½Úµã28£¬ÈçÏÂͼËùʾ¡£

leaf pageºÍindex page¶¼Ã»ÓÐÂú

½Ó×ŲåÈëÏÂÒ»¸ö½Úµã70£¬ÔÚIndex PageÖвéѯºóµÃÖªÓ¦¸Ã²åÈëµ½50 - 70Ö®¼äµÄÒ¶×ӽڵ㣬µ«Ò¶×Ó½ÚµãÒÑÂú£¬Õâʱºò¾ÍÐèÒª½øÐÐÒ²·ÖÁѵIJÙ×÷£¬µ±Ç°µÄÒ¶×Ó½ÚµãÆðµãΪ50£¬ËùÒÔ¸ù¾ÝÖмäÖµÀ´²ð·ÖÒ¶×ӽڵ㣬ÈçÏÂͼËùʾ¡£

Leaf Page²ð·Ö

×îºó²åÈëÒ»¸ö½Úµã95£¬ÕâʱºòIndex PageºÍLeaf Page¶¼ÂúÁË£¬¾ÍÐèÒª×öÁ½´Î²ð·Ö£¬ÈçÏÂͼËùʾ¡£

Leaf PageÓëIndex Page²ð·Ö

²ð·Öºó×îÖÕÐγÉÁËÕâÑùÒ»¿ÅÊ÷¡£

×îÖÕÊ÷

B+TreeΪÁ˱£³Öƽºâ£¬¶ÔÓÚвåÈëµÄÖµÐèÒª×ö´óÁ¿µÄ²ð·ÖÒ³²Ù×÷£¬¶øÒ³µÄ²ð·ÖÐèÒªI/O²Ù×÷£¬ÎªÁ˾¡¿ÉÄܵļõÉÙÒ³µÄ²ð·Ö²Ù×÷£¬B+TreeÒ²ÌṩÁËÀàËÆÓÚÆ½ºâ¶þ²æÊ÷µÄÐýת¹¦ÄÜ¡£µ±Leaf PageÒÑÂúµ«Æä×óÓÒÐֵܽڵãûÓÐÂúµÄÇé¿öÏ£¬B+Tree²¢²»¼±ÓÚÈ¥×ö²ð·Ö²Ù×÷£¬¶øÊǽ«¼ÇÂ¼ÒÆµ½µ±Ç°ËùÔÚÒ³µÄÐֵܽڵãÉÏ¡£Í¨³£Çé¿öÏ£¬×óÐֵܻᱻÏȼì²éÓÃÀ´×öÐýת²Ù×÷¡£¾Í±ÈÈçÉÏÃæµÚ¶þ¸öʾÀý£¬µ±²åÈë70µÄʱºò£¬²¢²»»áÈ¥×öÒ³²ð·Ö£¬¶øÊÇ×óÐý²Ù×÷¡£

×óÐý²Ù×÷

ͨ¹ýÐýת²Ù×÷¿ÉÒÔ×î´óÏ޶ȵļõÉÙÒ³·ÖÁÑ£¬´Ó¶ø¼õÉÙË÷Òýά»¤¹ý³ÌÖеĴÅÅ̵ÄI/O²Ù×÷£¬Ò²Ìá¸ßË÷Òýά»¤Ð§ÂÊ¡£ÐèҪעÒâµÄÊÇ£¬É¾³ý½Úµã¸ú²åÈë½ÚµãÀàËÆ£¬ÈÔÈ»ÐèÒªÐýתºÍ²ð·Ö²Ù×÷£¬ÕâÀï¾Í²»ÔÙ˵Ã÷¡£

¸ßÐÔÄܲßÂÔ

ͨ¹ýÉÏÎÄ£¬ÏàÐÅÄã¶ÔB+TreeµÄÊý¾Ý½á¹¹ÒѾ­ÓÐÁË´óÖµÄÁ˽⣬µ«MySQLÖÐË÷ÒýÊÇÈçºÎ×éÖ¯Êý¾ÝµÄ´æ´¢ÄØ£¿ÒÔÒ»¸ö¼òµ¥µÄʾÀýÀ´ËµÃ÷£¬¼ÙÈçÓÐÈçÏÂÊý¾Ý±í£º

CREATE TABLE People(
last_name varchar(50) not null,
first_name varchar(50) not null,
dob date not null,
gender enum(`m`,`f`) not null,
key(last_name,first_name,dob)
);

¶ÔÓÚ±íÖÐÿһÐÐÊý¾Ý£¬Ë÷ÒýÖаüº¬ÁËlast_name¡¢first_name¡¢dobÁеÄÖµ£¬ÏÂͼչʾÁËË÷ÒýÊÇÈçºÎ×éÖ¯Êý¾Ý´æ´¢µÄ¡£

Ë÷ÒýÈçºÎ×éÖ¯Êý¾Ý´æ´¢£¬À´×Ô£º¸ßÐÔÄÜMySQL

MySQL²»»áʹÓÃË÷ÒýµÄÇé¿ö£º·Ç¶ÀÁ¢µÄÁÐ

¡°¶ÀÁ¢µÄÁС±ÊÇÖ¸Ë÷ÒýÁв»ÄÜÊDZí´ïʽµÄÒ»²¿·Ö£¬Ò²²»ÄÜÊǺ¯ÊýµÄ²ÎÊý¡£±ÈÈ磺

select * from table_name where id + 1 = 5

ÎÒÃǺÜÈÝÒ׿´³öÆäµÈ¼ÛÓÚ id = 4£¬µ«ÊÇMySQLÎÞ·¨×Ô¶¯½âÎöÕâ¸ö±í´ïʽ£¬Ê¹Óú¯ÊýÊÇͬÑùµÄµÀÀí¡£

ǰ׺Ë÷Òý

Èç¹ûÁкܳ¤£¬Í¨³£¿ÉÒÔË÷Òý¿ªÊ¼µÄ²¿·Ö×Ö·û£¬ÕâÑù¿ÉÒÔÓÐЧ½ÚÔ¼Ë÷Òý¿Õ¼ä£¬´Ó¶øÌá¸ßË÷ÒýЧÂÊ¡£

¶àÁÐË÷ÒýºÍË÷Òý˳Ðò

ÔÚ¶àÊýÇé¿öÏ£¬ÔÚ¶à¸öÁÐÉϽ¨Á¢¶ÀÁ¢µÄË÷Òý²¢²»ÄÜÌá¸ß²éѯÐÔÄÜ¡£ÀíÓɷdz£¼òµ¥£¬MySQL²»ÖªµÀÑ¡ÔñÄĸöË÷ÒýµÄ²éѯЧÂʸüºÃ£¬ËùÒÔÔÚÀϰ汾£¬±ÈÈçMySQL5.0֮ǰ¾Í»áËæ±ãÑ¡ÔñÒ»¸öÁеÄË÷Òý£¬¶øÐµİ汾»á²ÉÓúϲ¢Ë÷ÒýµÄ²ßÂÔ¡£¾Ù¸ö¼òµ¥µÄÀý×Ó£¬ÔÚÒ»ÕŵçÓ°ÑÝÔ±±íÖУ¬ÔÚactor_idºÍfilm_idÁ½¸öÁÐÉ϶¼½¨Á¢Á˶ÀÁ¢µÄË÷Òý£¬È»ºóÓÐÈçϲéѯ£º

select film_id,actor_id from film_actor where actor_id = 1 or film_id = 1
-- Àϰ汾µÄMySQL»áËæ»úÑ¡ÔñÒ»¸öË÷Òý£¬µ«Ð°汾×öÈçϵÄÓÅ»¯£º

select film_id,actor_id from film_actor where actor_id = 1
union all
select film_id,actor_id from film_actor where film_id = 1 and actor_id <> 1

µ±³öÏÖ¶à¸öË÷Òý×öÏཻ²Ù×÷ʱ£¨¶à¸öANDÌõ¼þ£©£¬Í¨³£À´ËµÒ»¸ö°üº¬ËùÓÐÏà¹ØÁеÄË÷ÒýÒªÓÅÓÚ¶à¸ö¶ÀÁ¢Ë÷Òý¡£

µ±³öÏÖ¶à¸öË÷Òý×öÁªºÏ²Ù×÷ʱ£¨¶à¸öORÌõ¼þ£©£¬¶Ô½á¹û¼¯µÄºÏ²¢¡¢ÅÅÐòµÈ²Ù×÷ÐèÒªºÄ·Ñ´óÁ¿µÄCPUºÍÄÚ´æ×ÊÔ´£¬ÌرðÊǵ±ÆäÖеÄijЩË÷ÒýµÄÑ¡ÔñÐÔ²»¸ß£¬ÐèÒª·µ»ØºÏ²¢´óÁ¿Êý¾Ýʱ£¬²éѯ³É±¾¸ü¸ß¡£ËùÒÔÕâÖÖÇé¿öÏ»¹²»Èç×ßÈ«±íɨÃè¡£

Òò´ËexplainʱÈç¹û·¢ÏÖÓÐË÷ÒýºÏ²¢£¨Extra×ֶγöÏÖUsing union£©£¬Ó¦¸ÃºÃºÃ¼ì²éһϲéѯºÍ±í½á¹¹ÊDz»ÊÇÒѾ­ÊÇ×îÓŵģ¬Èç¹û²éѯºÍ±í¶¼Ã»ÓÐÎÊÌ⣬ÄÇÖ»ÄÜ˵Ã÷Ë÷Òý½¨µÄ·Ç³£Ôã¸â£¬Ó¦µ±É÷ÖØ¿¼ÂÇË÷ÒýÊÇ·ñºÏÊÊ£¬ÓпÉÄÜÒ»¸ö°üº¬ËùÓÐÏà¹ØÁеĶàÁÐË÷Òý¸üÊʺϡ£

Ç°ÃæÎÒÃÇÌáµ½¹ýË÷ÒýÈçºÎ×éÖ¯Êý¾Ý´æ´¢µÄ£¬´ÓͼÖпÉÒÔ¿´µ½¶àÁÐË÷Òýʱ£¬Ë÷ÒýµÄ˳Ðò¶ÔÓÚ²éѯÊÇÖÁ¹ØÖØÒªµÄ£¬ºÜÃ÷ÏÔÓ¦¸Ã°ÑÑ¡ÔñÐÔ¸ü¸ßµÄ×ֶηŵ½Ë÷ÒýµÄÇ°Ãæ£¬ÕâÑùͨ¹ýµÚÒ»¸ö×ֶξͿÉÒÔ¹ýÂ˵ô´ó¶àÊý²»·ûºÏÌõ¼þµÄÊý¾Ý¡£

Ë÷ÒýÑ¡ÔñÐÔÊÇÖ¸²»Öظ´µÄË÷ÒýÖµºÍÊý¾Ý±íµÄ×ܼǼÊýµÄ±ÈÖµ£¬Ñ¡ÔñÐÔÔ½¸ß²éѯЧÂÊÔ½¸ß£¬ÒòΪѡÔñÐÔÔ½¸ßµÄË÷Òý¿ÉÒÔÈÃMySQLÔÚ²éѯʱ¹ýÂ˵ô¸ü¶àµÄÐС£Î¨Ò»Ë÷ÒýµÄÑ¡ÔñÐÔÊÇ1£¬ÕâÊÇ×îºÃµÄË÷ÒýÑ¡ÔñÐÔ£¬ÐÔÄÜÒ²ÊÇ×îºÃµÄ¡£

Àí½âË÷ÒýÑ¡ÔñÐԵĸÅÄîºó£¬¾Í²»ÄÑÈ·¶¨Äĸö×ֶεÄÑ¡ÔñÐԽϸßÁË£¬²éһϾÍÖªµÀÁË£¬±ÈÈ磺

SELECT * FROM payment where staff_id = 2 and customer_id = 584

ÊÇÓ¦¸Ã´´½¨(staff_id,customer_id)µÄË÷Òý»¹ÊÇÓ¦¸Ãµßµ¹Ò»ÏÂ˳Ðò£¿Ö´ÐÐÏÂÃæµÄ²éѯ£¬Äĸö×ֶεÄÑ¡ÔñÐÔ¸ü½Ó½ü1¾Í°ÑÄĸö×Ö¶ÎË÷ÒýÇ°Ãæ¾ÍºÃ¡£

select count(distinct staff_id)/count(*) as staff_id_selectivity,
count(distinct customer_id)/count(*) as customer_id_selectivity,
count(*) from payment

¶àÊýÇé¿öÏÂʹÓÃÕâ¸öÔ­ÔòûÓÐÈκÎÎÊÌ⣬µ«ÈÔÈ»×¢ÒâÄãµÄÊý¾ÝÖÐÊÇ·ñ´æÔÚÒ»Ð©ÌØÊâÇé¿ö¡£¾Ù¸ö¼òµ¥µÄÀý×Ó£¬±ÈÈçÒª²éѯij¸öÓû§×éÏÂÓйý½»Ò×µÄÓû§ÐÅÏ¢£º

select user_id from trade where user_group_id = 1 and trade_amount > 0

MySQLΪÕâ¸ö²éѯѡÔñÁËË÷Òý(user_group_id,trade_amount)£¬Èç¹û²»¿¼ÂÇÌØÊâÇé¿ö£¬Õâ¿´ÆðÀ´Ã»ÓÐÈκÎÎÊÌ⣬µ«Êµ¼ÊÇé¿öÊÇÕâÕűíµÄ´ó¶àÊýÊý¾Ý¶¼ÊÇ´ÓÀÏϵͳÖÐÇ¨ÒÆ¹ýÀ´µÄ£¬ÓÉÓÚÐÂÀÏϵͳµÄÊý¾Ý²»¼æÈÝ£¬ËùÒԾ͸øÀÏÏµÍ³Ç¨ÒÆ¹ýÀ´µÄÊý¾Ý¸³ÓèÁËÒ»¸öĬÈϵÄÓû§×é¡£ÕâÖÖÇé¿öÏ£¬Í¨¹ýË÷ÒýɨÃèµÄÐÐÊý¸úÈ«±íɨÃè»ù±¾Ã»Ê²Ã´Çø±ð£¬Ë÷ÒýÒ²¾ÍÆð²»µ½ÈκÎ×÷Óá£

ÍÆ¹ã¿ªÀ´Ëµ£¬¾­Ñé·¨ÔòºÍÍÆÂÛÔÚ¶àÊýÇé¿öÏÂÊÇÓÐÓõģ¬¿ÉÒÔÖ¸µ¼ÎÒÃÇ¿ª·¢ºÍÉè¼Æ£¬µ«Êµ¼ÊÇé¿öÍùÍù»á¸ü¸´ÔÓ£¬Êµ¼ÊÒµÎñ³¡¾°ÏµÄÄ³Ð©ÌØÊâÇé¿ö¿ÉÄÜ»á´Ý»ÙÄãµÄÕû¸öÉè¼Æ¡£

±ÜÃâ¶à¸ö·¶Î§Ìõ¼þ

ʵ¼Ê¿ª·¢ÖУ¬ÎÒÃǻᾭ³£Ê¹Óöà¸ö·¶Î§Ìõ¼þ£¬±ÈÈçÏë²éѯij¸öʱ¼ä¶ÎÄڵǼ¹ýµÄÓû§£º

select user.* from user where login_time > '2017-04-01' and age between 18 and 30;

Õâ¸ö²éѯÓÐÒ»¸öÎÊÌ⣺ËüÓÐÁ½¸ö·¶Î§Ìõ¼þ£¬login_timeÁкÍageÁУ¬MySQL¿ÉÒÔʹÓÃlogin_timeÁеÄË÷Òý»òÕßageÁеÄË÷Òý£¬µ«ÎÞ·¨Í¬Ê±Ê¹ÓÃËüÃÇ¡£

¸²¸ÇË÷Òý

Èç¹ûÒ»¸öË÷Òý°üº¬»òÕß˵¸²¸ÇËùÓÐÐèÒª²éѯµÄ×ֶεÄÖµ£¬ÄÇô¾ÍûÓбØÒªÔٻرí²éѯ£¬Õâ¾Í³ÆÎª¸²¸ÇË÷Òý¡£¸²¸ÇË÷ÒýÊǷdz£ÓÐÓõŤ¾ß£¬¿ÉÒÔ¼«´óµÄÌá¸ßÐÔÄÜ£¬ÒòΪ²éѯֻÐèҪɨÃèË÷Òý»á´øÀ´Ðí¶àºÃ´¦£º

Ë÷ÒýÌõĿԶСÓÚÊý¾ÝÐдóС£¬Èç¹ûÖ»¶ÁÈ¡Ë÷Òý£¬¼«´ó¼õÉÙÊý¾Ý·ÃÎÊÁ¿

Ë÷ÒýÊÇÓа´ÕÕÁÐֵ˳Ðò´æ´¢µÄ£¬¶ÔÓÚI/OÃܼ¯Ð͵ķ¶Î§²éѯҪ±ÈËæ»ú´Ó´ÅÅ̶ÁȡÿһÐÐÊý¾ÝµÄIOÒªÉٵĶà

ʹÓÃË÷ÒýɨÃèÀ´ÅÅÐò

MySQLÓÐÁ½ÖÖ·½Ê½¿ÉÒÔÉú²úÓÐÐòµÄ½á¹û¼¯£¬ÆäÒ»ÊǶԽá¹û¼¯½øÐÐÅÅÐòµÄ²Ù×÷£¬Æä¶þÊǰ´ÕÕË÷Òý˳ÐòɨÃèµÃ³öµÄ½á¹û×ÔÈ»ÊÇÓÐÐòµÄ¡£Èç¹ûexplainµÄ½á¹ûÖÐtypeÁеÄֵΪindex±íʾʹÓÃÁËË÷ÒýɨÃèÀ´×öÅÅÐò¡£

ɨÃèË÷Òý±¾ÉíºÜ¿ì£¬ÒòΪֻÐèÒª´ÓÒ»ÌõË÷Òý¼ÇÂ¼ÒÆ¶¯µ½ÏàÁÚµÄÏÂÒ»Ìõ¼Ç¼¡£µ«Èç¹ûË÷Òý±¾Éí²»Äܸ²¸ÇËùÓÐÐèÒª²éѯµÄÁУ¬ÄÇô¾Í²»µÃ²»Ã¿É¨ÃèÒ»ÌõË÷Òý¼Ç¼¾Í»Ø±í²éѯһ´Î¶ÔÓ¦µÄÐС£Õâ¸ö¶ÁÈ¡²Ù×÷»ù±¾ÉÏÊÇËæ»úI/O£¬Òò´Ë°´ÕÕË÷Òý˳Ðò¶ÁÈ¡Êý¾ÝµÄËÙ¶Èͨ³£Òª±È˳ÐòµØÈ«±íɨÃèÒªÂý¡£

ÔÚÉè¼ÆË÷Òýʱ£¬Èç¹ûÒ»¸öË÷Òý¼ÈÄܹ»Âú×ãÅÅÐò£¬ÓÖÂú×ã²éѯ£¬ÊÇ×îºÃµÄ¡£

Ö»Óе±Ë÷ÒýµÄÁÐ˳ÐòºÍORDER BY×Ó¾äµÄ˳ÐòÍêȫһÖ£¬²¢ÇÒËùÓÐÁеÄÅÅÐò·½ÏòÒ²Ò»Ñùʱ£¬²ÅÄܹ»Ê¹ÓÃË÷ÒýÀ´¶Ô½á¹û×öÅÅÐò¡£Èç¹û²éѯÐèÒª¹ØÁª¶àÕÅ±í£¬ÔòÖ»ÓÐORDER BY×Ó¾äÒýÓõÄ×Ö¶ÎÈ«²¿ÎªµÚÒ»Õűíʱ£¬²ÅÄÜʹÓÃË÷Òý×öÅÅÐò¡£ORDER BY×Ó¾äºÍ²éѯµÄÏÞÖÆÊÇÒ»ÑùµÄ£¬¶¼ÒªÂú×ã×î×óǰ׺µÄÒªÇó£¨ÓÐÒ»ÖÖÇé¿öÀýÍ⣬¾ÍÊÇ×î×óµÄÁб»Ö¸¶¨Îª³£Êý£¬ÏÂÃæÊÇÒ»¸ö¼òµ¥µÄʾÀý£©£¬ÆäËûÇé¿ö϶¼ÐèÒªÖ´ÐÐÅÅÐò²Ù×÷£¬¶øÎÞ·¨ÀûÓÃË÷ÒýÅÅÐò¡£

-- ×î×óÁÐΪ³£Êý£¬Ë÷Òý£º(date,staff_id,customer_id)
select staff_id,customer_id from demo where date = '2015-06-01' order by staff_id,customer_id

ÈßÓàºÍÖØ¸´Ë÷Òý

ÈßÓàË÷ÒýÊÇÖ¸ÔÚÏàͬµÄÁÐÉϰ´ÕÕÏàͬµÄ˳Ðò´´½¨µÄÏàͬÀàÐ͵ÄË÷Òý£¬Ó¦µ±¾¡Á¿±ÜÃâÕâÖÖË÷Òý£¬·¢ÏÖºóÁ¢¼´É¾³ý¡£±ÈÈçÓÐÒ»¸öË÷Òý(A,B)£¬ÔÙ´´½¨Ë÷Òý(A)¾ÍÊÇÈßÓàË÷Òý¡£ÈßÓàË÷Òý¾­³£·¢ÉúÔÚΪ±íÌí¼ÓÐÂË÷Òýʱ£¬±ÈÈçÓÐÈËн¨ÁËË÷Òý(A,B)£¬µ«Õâ¸öË÷Òý²»ÊÇÀ©Õ¹ÒÑÓеÄË÷Òý(A)¡£

´ó¶àÊýÇé¿ö϶¼Ó¦¸Ã¾¡Á¿À©Õ¹ÒÑÓеÄË÷Òý¶ø²»ÊÇ´´½¨ÐÂË÷Òý¡£µ«Óм«ÉÙÇé¿öϳöÏÖÐÔÄÜ·½ÃæµÄ¿¼ÂÇÐèÒªÈßÓàË÷Òý£¬±ÈÈçÀ©Õ¹ÒÑÓÐË÷Òý¶øµ¼ÖÂÆä±äµÃ¹ý´ó£¬´Ó¶øÓ°Ïìµ½ÆäËûʹÓøÃË÷ÒýµÄ²éѯ¡£

ɾ³ý³¤ÆÚδʹÓõÄË÷Òý

¶¨ÆÚɾ³ýһЩ³¤Ê±¼äδʹÓùýµÄË÷ÒýÊÇÒ»¸ö·Ç³£ºÃµÄϰ¹ß¡£

¹ØÓÚË÷ÒýÕâ¸ö»°Ìâ´òËã¾Í´Ë´òס£¬×îºóҪ˵һ¾ä£¬Ë÷Òý²¢²»×ÜÊÇ×îºÃµÄ¹¤¾ß£¬Ö»Óе±Ë÷Òý°ïÖúÌá¸ß²éѯËÙ¶È´øÀ´µÄºÃ´¦´óÓÚÆä´øÀ´µÄ¶îÍ⹤×÷ʱ£¬Ë÷Òý²ÅÊÇÓÐЧµÄ¡£¶ÔÓڷdz£Ð¡µÄ±í£¬¼òµ¥µÄÈ«±íɨÃè¸ü¸ßЧ¡£¶ÔÓÚÖе½´óÐÍµÄ±í£¬Ë÷Òý¾Í·Ç³£ÓÐЧ¡£¶ÔÓÚ³¬´óÐÍµÄ±í£¬½¨Á¢ºÍά»¤Ë÷ÒýµÄ´ú¼ÛËæÖ®Ôö³¤£¬ÕâʱºòÆäËû¼¼ÊõÒ²Ðí¸üÓÐЧ£¬±ÈÈç·ÖÇø±í¡£×îºóµÄ×îºó£¬explainºóÔÙÌá²âÊÇÒ»ÖÖÃÀµÂ¡£

ÌØ¶¨ÀàÐͲéѯÓÅ»¯

ÓÅ»¯COUNT()²éѯ

COUNT()¿ÉÄÜÊDZ»´ó¼ÒÎó½â×î¶àµÄº¯ÊýÁË£¬ËüÓÐÁ½ÖÖ²»Í¬µÄ×÷Óã¬ÆäÒ»ÊÇͳ¼ÆÄ³¸öÁÐÖµµÄÊýÁ¿£¬Æä¶þÊÇͳ¼ÆÐÐÊý¡£Í³¼ÆÁÐֵʱ£¬ÒªÇóÁÐÖµÊǷǿյģ¬Ëü²»»áͳ¼ÆNULL¡£Èç¹ûÈ·ÈÏÀ¨ºÅÖеıí´ïʽ²»¿ÉÄÜΪ¿Õʱ£¬Êµ¼ÊÉϾÍÊÇÔÚͳ¼ÆÐÐÊý¡£×î¼òµ¥µÄ¾ÍÊǵ±Ê¹ÓÃCOUNT(*)ʱ£¬²¢²»ÊÇÎÒÃÇËùÏëÏóµÄÄÇÑùÀ©Õ¹³ÉËùÓеÄÁУ¬Êµ¼ÊÉÏ£¬Ëü»áºöÂÔËùÓеÄÁжøÖ±½Óͳ¼ÆÐÐÊý¡£

ÎÒÃÇ×î³£¼ûµÄÎó½âÒ²¾ÍÔÚÕâ¶ù£¬ÔÚÀ¨ºÅÄÚÖ¸¶¨ÁËÒ»ÁÐÈ´Ï£Íûͳ¼Æ½á¹ûÊÇÐÐÊý£¬¶øÇÒ»¹³£³£ÎóÒÔΪǰÕßµÄÐÔÄÜ»á¸üºÃ¡£µ«Êµ¼Ê²¢·ÇÕâÑù£¬Èç¹ûҪͳ¼ÆÐÐÊý£¬Ö±½ÓʹÓÃCOUNT(*)£¬ÒâÒåÇåÎú£¬ÇÒÐÔÄܸüºÃ¡£

ÓÐʱºòijЩҵÎñ³¡¾°²¢²»ÐèÒªÍêÈ«¾«È·µÄCOUNTÖµ£¬¿ÉÒÔÓýüËÆÖµÀ´´úÌæ£¬EXPLAIN³öÀ´µÄÐÐÊý¾ÍÊÇÒ»¸ö²»´íµÄ½üËÆÖµ£¬¶øÇÒÖ´ÐÐEXPLAIN²¢²»ÐèÒªÕæÕýµØÈ¥Ö´Ðвéѯ£¬ËùÒԳɱ¾·Ç³£µÍ¡£Í¨³£À´Ëµ£¬Ö´ÐÐCOUNT()¶¼ÐèҪɨÃè´óÁ¿µÄÐвÅÄÜ»ñÈ¡µ½¾«È·µÄÊý¾Ý£¬Òò´ËºÜÄÑÓÅ»¯£¬MySQL²ãÃæ»¹ÄÜ×öµÃÒ²¾ÍÖ»Óи²¸ÇË÷ÒýÁË¡£Èç¹û²»»¹Äܽâ¾öÎÊÌ⣬ֻÓдӼܹ¹²ãÃæ½â¾öÁË£¬±ÈÈçÌí¼Ó»ã×Ü±í£¬»òÕßʹÓÃredisÕâÑùµÄÍⲿ»º´æÏµÍ³¡£

ÓÅ»¯¹ØÁª²éѯ

ÔÚ´óÊý¾Ý³¡¾°Ï£¬±íÓë±íÖ®¼äͨ¹ýÒ»¸öÈßÓà×Ö¶ÎÀ´¹ØÁª£¬Òª±ÈÖ±½ÓʹÓÃJOINÓиüºÃµÄÐÔÄÜ¡£Èç¹ûȷʵÐèҪʹÓùØÁª²éѯµÄÇé¿öÏ£¬ÐèÒªÌØ±ð×¢ÒâµÄÊÇ£º

È·±£ONºÍUSING×Ö¾äÖеÄÁÐÉÏÓÐË÷Òý¡£ÔÚ´´½¨Ë÷ÒýµÄʱºò¾ÍÒª¿¼Âǵ½¹ØÁªµÄ˳Ðò¡£µ±±íAºÍ±íBÓÃÁÐc¹ØÁªµÄʱºò£¬Èç¹ûÓÅ»¯Æ÷¹ØÁªµÄ˳ÐòÊÇA¡¢B£¬ÄÇô¾Í²»ÐèÒªÔÚA±íµÄ¶ÔÓ¦ÁÐÉÏ´´½¨Ë÷Òý¡£Ã»ÓÐÓõ½µÄË÷Òý»á´øÀ´¶îÍâµÄ¸ºµ££¬Ò»°ãÀ´Ëµ£¬³ý·ÇÓÐÆäËûÀíÓÉ£¬Ö»ÐèÒªÔÚ¹ØÁªË³ÐòÖеĵڶþÕűíµÄÏàÓ¦ÁÐÉÏ´´½¨Ë÷Òý£¨¾ßÌåÔ­ÒòÏÂÎÄ·ÖÎö£©¡£

È·±£ÈκεÄGROUP BYºÍORDER BYÖеıí´ïÊ½Ö»Éæ¼°µ½Ò»¸ö±íÖеÄÁУ¬ÕâÑùMySQL²ÅÓпÉÄÜʹÓÃË÷ÒýÀ´ÓÅ»¯¡£

ÒªÀí½âÓÅ»¯¹ØÁª²éѯµÄµÚÒ»¸ö¼¼ÇÉ£¬¾ÍÐèÒªÀí½âMySQLÊÇÈçºÎÖ´ÐйØÁª²éѯµÄ¡£µ±Ç°MySQL¹ØÁªÖ´ÐеIJßÂԷdz£¼òµ¥£¬Ëü¶ÔÈκεĹØÁª¶¼Ö´ÐÐǶÌ×Ñ­»·¹ØÁª²Ù×÷£¬¼´ÏÈÔÚÒ»¸ö±íÖÐÑ­»·È¡³öµ¥ÌõÊý¾Ý£¬È»ºóÔÚǶÌ×Ñ­»·µ½ÏÂÒ»¸ö±íÖÐѰÕÒÆ¥ÅäµÄÐУ¬ÒÀ´ÎÏÂÈ¥£¬Ö±µ½ÕÒµ½ËùÓбíÖÐÆ¥ÅäµÄÐÐΪΪֹ¡£È»ºó¸ù¾Ý¸÷¸ö±íÆ¥ÅäµÄÐУ¬·µ»Ø²éѯÖÐÐèÒªµÄ¸÷¸öÁС£

Ì«³éÏóÁË£¿ÒÔÉÏÃæµÄʾÀýÀ´ËµÃ÷£¬±ÈÈçÓÐÕâÑùµÄÒ»¸ö²éѯ£º

SELECT A.xx,B.yy
FROM A INNER JOIN B USING(c)
WHERE A.xx IN (5,6)

¼ÙÉèMySQL°´ÕÕ²éѯÖеĹØÁªË³ÐòA¡¢BÀ´½øÐйØÁª²Ù×÷£¬ÄÇô¿ÉÒÔÓÃÏÂÃæµÄα´úÂë±íʾMySQLÈçºÎÍê³ÉÕâ¸ö²éѯ£º

outer_iterator = SELECT A.xx,A.c FROM A WHERE A.xx IN (5,6);
outer_row = outer_iterator.next;
while(outer_row) {
inner_iterator = SELECT B.yy FROM B WHERE B.c = outer_row.c;
inner_row = inner_iterator.next;
while(inner_row) {
output[inner_row.yy,outer_row.xx];
inner_row = inner_iterator.next;
}
outer_row = outer_iterator.next;
}

¿ÉÒÔ¿´µ½£¬×îÍâ²ãµÄ²éѯÊǸù¾ÝA.xxÁÐÀ´²éѯµÄ£¬A.cÉÏÈç¹ûÓÐË÷ÒýµÄ»°£¬Õû¸ö¹ØÁª²éѯҲ²»»áʹÓá£ÔÙ¿´ÄÚ²ãµÄ²éѯ£¬ºÜÃ÷ÏÔB.cÉÏÈç¹ûÓÐË÷ÒýµÄ»°£¬Äܹ»¼ÓËÙ²éѯ£¬Òò´ËÖ»ÐèÒªÔÚ¹ØÁªË³ÐòÖеĵڶþÕűíµÄÏàÓ¦ÁÐÉÏ´´½¨Ë÷Òý¼´¿É¡£

ÓÅ»¯LIMIT·ÖÒ³

µ±ÐèÒª·ÖÒ³²Ù×÷ʱ£¬Í¨³£»áʹÓÃLIMIT¼ÓÉÏÆ«ÒÆÁ¿µÄ°ì·¨ÊµÏÖ£¬Í¬Ê±¼ÓÉϺÏÊʵÄORDER BY×־䡣Èç¹ûÓжÔÓ¦µÄË÷Òý£¬Í¨³£Ð§Âʻ᲻´í£¬·ñÔò£¬MySQLÐèÒª×ö´óÁ¿µÄÎļþÅÅÐò²Ù×÷¡£

Ò»¸ö³£¼ûµÄÎÊÌâÊǵ±Æ«ÒÆÁ¿·Ç³£´óµÄʱºò£¬±ÈÈ磺LIMIT 10000 20ÕâÑùµÄ²éѯ£¬MySQLÐèÒª²éѯ10020Ìõ¼Ç¼ȻºóÖ»·µ»Ø20Ìõ¼Ç¼£¬Ç°ÃæµÄ10000Ìõ¶¼½«±»Åׯú£¬ÕâÑùµÄ´ú¼Û·Ç³£¸ß¡£

ÓÅ»¯ÕâÖÖ²éѯһ¸ö×î¼òµ¥µÄ°ì·¨¾ÍÊǾ¡¿ÉÄܵÄʹÓø²¸ÇË÷ÒýɨÃ裬¶ø²»ÊDzéѯËùÓеÄÁС£È»ºó¸ù¾ÝÐèÒª×öÒ»´Î¹ØÁª²éѯÔÙ·µ»ØËùÓеÄÁС£¶ÔÓÚÆ«ÒÆÁ¿ºÜ´óʱ£¬ÕâÑù×öµÄЧÂÊ»áÌáÉý·Ç³£´ó¡£¿¼ÂÇÏÂÃæµÄ²éѯ£º

SELECT film_id,description FROM film ORDER BY title LIMIT 50,5;

Èç¹ûÕâÕűí·Ç³£´ó£¬ÄÇôÕâ¸ö²éѯ×îºÃ¸Ä³ÉÏÂÃæµÄÑù×Ó£º

SELECT film.film_id,film.description
FROM film INNER JOIN (
SELECT film_id FROM film ORDER BY title LIMIT 50,5
) AS tmp USING(film_id);

ÕâÀïµÄÑÓ³Ù¹ØÁª½«´ó´óÌáÉý²éѯЧÂÊ£¬ÈÃMySQLɨÃ辡¿ÉÄÜÉÙµÄÒ³Ãæ£¬»ñÈ¡ÐèÒª·ÃÎʵļǼºóÔÚ¸ù¾Ý¹ØÁªÁлØÔ­±í²éѯËùÐèÒªµÄÁС£

ÓÐʱºòÈç¹û¿ÉÒÔʹÓÃÊéÇ©¼Ç¼ÉÏ´ÎÈ¡Êý¾ÝµÄλÖã¬ÄÇôÏ´ξͿÉÒÔÖ±½Ó´Ó¸ÃÊéÇ©¼Ç¼µÄλÖÿªÊ¼É¨Ã裬ÕâÑù¾Í¿ÉÒÔ±ÜÃâʹÓÃOFFSET£¬±ÈÈçÏÂÃæµÄ²éѯ£º

SELECT id FROM t LIMIT 10000, 10;
-- ¸ÄΪ£º
SELECT id FROM t WHERE id > 10000 LIMIT 10;

ÆäËûÓÅ»¯µÄ°ì·¨»¹°üÀ¨Ê¹ÓÃÔ¤ÏȼÆËãµÄ»ã×Ü±í£¬»òÕß¹ØÁªµ½Ò»¸öÈßÓà±í£¬ÈßÓà±íÖÐÖ»°üº¬Ö÷¼üÁкÍÐèÒª×öÅÅÐòµÄÁС£

ÓÅ»¯UNION

MySQL´¦ÀíUNIONµÄ²ßÂÔÊÇÏÈ´´½¨ÁÙʱ±í£¬È»ºóÔٰѸ÷¸ö²éѯ½á¹û²åÈëµ½ÁÙʱ±íÖУ¬×îºóÔÙÀ´×ö²éѯ¡£Òò´ËºÜ¶àÓÅ»¯²ßÂÔÔÚUNION²éѯÖж¼Ã»Óа취ºÜºÃµÄʱºò¡£¾­³£ÐèÒªÊÖ¶¯½«WHERE¡¢LIMIT¡¢ORDER BYµÈ×־䡰ÏÂÍÆ¡±µ½¸÷¸ö×Ó²éѯÖУ¬ÒÔ±ãÓÅ»¯Æ÷¿ÉÒÔ³ä·ÖÀûÓÃÕâЩÌõ¼þÏÈÓÅ»¯¡£

³ý·ÇȷʵÐèÒª·þÎñÆ÷È¥ÖØ£¬·ñÔò¾ÍÒ»¶¨ÒªÊ¹ÓÃUNION ALL£¬Èç¹ûûÓÐALL¹Ø¼ü×Ö£¬MySQL»á¸øÁÙʱ±í¼ÓÉÏDISTINCTÑ¡ÏÕâ»áµ¼ÖÂÕû¸öÁÙʱ±íµÄÊý¾Ý×öΨһÐÔ¼ì²é£¬ÕâÑù×öµÄ´ú¼Û·Ç³£¸ß¡£µ±È»¼´Ê¹Ê¹ÓÃALL¹Ø¼ü×Ö£¬MySQL×ÜÊǽ«½á¹û·ÅÈëÁÙʱ±í£¬È»ºóÔÙ¶Á³ö£¬ÔÙ·µ»Ø¸ø¿Í»§¶Ë¡£ËäÈ»ºÜ¶àʱºòûÓÐÕâ¸ö±ØÒª£¬±ÈÈçÓÐʱºò¿ÉÒÔÖ±½Ó°Ñÿ¸ö×Ó²éѯµÄ½á¹û·µ»Ø¸ø¿Í»§¶Ë¡£

½áÓï

Àí½â²éѯÊÇÈçºÎÖ´ÐÐÒÔ¼°Ê±¼ä¶¼ÏûºÄÔÚÄÄЩµØ·½£¬ÔÙ¼ÓÉÏһЩÓÅ»¯¹ý³ÌµÄ֪ʶ£¬¿ÉÒÔ°ïÖú´ó¼Ò¸üºÃµÄÀí½âMySQL£¬Àí½â³£¼ûÓÅ»¯¼¼Çɱ³ºóµÄÔ­Àí¡£Ï£Íû±¾ÎÄÖеÄÔ­Àí¡¢Ê¾ÀýÄܹ»°ïÖú´ó¼Ò¸üºÃµÄ½«ÀíÂÛºÍʵ¼ùÁªÏµÆðÀ´£¬¸ü¶àµÄ½«ÀíÂÛ֪ʶÔËÓõ½Êµ¼ùÖС£

ÆäËûҲûɶ˵µÄÁË£¬¸ø´ó¼ÒÁôÁ½¸ö˼¿¼Ìâ°É£¬¿ÉÒÔÔÚÄÔ´üÀïÏëÏë´ð°¸£¬ÕâÒ²ÊÇ´ó¼Ò¾­³£¹ÒÔÚ×ì±ßµÄ£¬µ«ºÜÉÙÓÐÈË»á˼¿¼ÎªÊ²Ã´£¿

Óзdz£¶àµÄ³ÌÐòÔ±ÔÚ·ÖÏíʱ¶¼»áÅ׳öÕâÑùÒ»¸ö¹Ûµã£º¾¡¿ÉÄܲ»ÒªÊ¹Óô洢¹ý³Ì£¬´æ´¢¹ý³Ì·Ç³£²»ÈÝÒ×ά»¤£¬Ò²»áÔö¼ÓʹÓóɱ¾£¬Ó¦¸Ã°ÑÒµÎñÂß¼­·Åµ½¿Í»§¶Ë¡£¼ÈÈ»¿Í»§¶Ë¶¼ÄܸÉÕâЩÊ£¬ÄÇΪʲô»¹Òª´æ´¢¹ý³Ì£¿

JOIN±¾ÉíҲͦ·½±ãµÄ£¬Ö±½Ó²éѯ¾ÍºÃÁË£¬ÎªÊ²Ã´»¹ÐèÒªÊÓÍ¼ÄØ£¿

   
2296 ´Îä¯ÀÀ       27
Ïà¹ØÎÄÕÂ

»ùÓÚEAµÄÊý¾Ý¿â½¨Ä£
Êý¾ÝÁ÷½¨Ä££¨EAÖ¸ÄÏ£©
¡°Êý¾Ýºþ¡±£º¸ÅÄî¡¢ÌØÕ÷¡¢¼Ü¹¹Óë°¸Àý
ÔÚÏßÉ̳ÇÊý¾Ý¿âϵͳÉè¼Æ ˼·+Ч¹û
 
Ïà¹ØÎĵµ

GreenplumÊý¾Ý¿â»ù´¡Åàѵ
MySQL5.1ÐÔÄÜÓÅ»¯·½°¸
ijµçÉÌÊý¾ÝÖÐ̨¼Ü¹¹Êµ¼ù
MySQL¸ßÀ©Õ¹¼Ü¹¹Éè¼Æ
Ïà¹Ø¿Î³Ì

Êý¾ÝÖÎÀí¡¢Êý¾Ý¼Ü¹¹¼°Êý¾Ý±ê×¼
MongoDBʵս¿Î³Ì
²¢·¢¡¢´óÈÝÁ¿¡¢¸ßÐÔÄÜÊý¾Ý¿âÉè¼ÆÓëÓÅ»¯
PostgreSQLÊý¾Ý¿âʵսÅàѵ