MySQLåªèµ°ä¸ä¸ªç´¢å¼ï¼è¿æ¯ä¼ç´¢å¼åå¹¶ï¼ç´¢å¼ä¸æ¨ä¼ææ ·ï¼
MySQLæ¯å¦æ¯æ¬¡åªè½ä½¿ç¨ä¸ä¸ªç´¢å¼ï¼
çæ¡å½ç¶ä¸æ¯çï¼MySQLæ¯æ¬¡å¯ä»¥ä½¿ç¨å¤ä¸ªç´¢å¼ï¼å³ index mergeï¼ç´¢å¼åå¹¶ï¼ï¼ä½å¤§å¤æ°æ åµä¸é½åªä¼ä½¿ç¨ä¸ä¸ªç´¢å¼ï¼é£è¿æ¯ä¸ºä»ä¹å§ï¼
1. 为ä»ä¹ä¼æindex merge
-
MySQL5.0ä¹åï¼ä¸ä¸ªè¡¨ä¸æ¬¡åªè½ä½¿ç¨ä¸ä¸ªç´¢å¼ï¼æ æ³åæ¶ä½¿ç¨å¤ä¸ªç´¢å¼åå«è¿è¡æ¡ä»¶æ«æã使¯ä»5.1å¼å§ï¼å¼å ¥äº index merge ä¼åææ¯ï¼å¯¹åä¸ä¸ªè¡¨å¯ä»¥ä½¿ç¨å¤ä¸ªç´¢å¼åå«è¿è¡æ¡ä»¶æ«æ
-
æä»¬ç where ä¸å¯è½æå¤ä¸ªæ¡ä»¶(æè join)æ¶åå°å¤ä¸ªå段ï¼å®ä»¬ä¹é´è¿è¡ AND æè ORï¼é£ä¹æ¤æ¶å°±æå¯è½ä¼ä½¿ç¨å° index merge ææ¯ãindex merge ææ¯å¦æç®åç说ï¼å ¶å®å°±æ¯ï¼å¯¹å¤ä¸ªç´¢å¼åå«è¿è¡æ¡ä»¶æ«æï¼ç¶åå°å®ä»¬åèªçç»æè¿è¡åå¹¶(intersect/union)
-
ç´¢å¼åå¹¶æ¯éè¿å¤ä¸ªrangeç±»åçæ«æå¹¶ä¸åå¹¶å®ä»¬çç»æéæ¥æ£ç´¢è¡çãä» åå¹¶æ¥èªå个表çç´¢å¼æ«æï¼è䏿¯è·¨å¤ä¸ªè¡¨çç´¢å¼æ«æãåå¹¶ä¼äº§çåºå±æ«æçä¸ç§å½¢å¼ï¼unionsï¼åå¹¶ï¼ãintersectionsï¼äº¤éï¼ãunions-of-intersectionsï¼å å交éååå¹¶ï¼
-
ç´¢å¼å并详ç»è®²è§£å¯åèææ«æ¨èé 读
2. 为ä»ä¹å¾å°è§index merge
-
ä¸å ¶è¯´æ¯âæ°æ®åºæ¥è¯¢åªè½ç¨å°ä¸ä¸ªç´¢å¼âï¼å䏿¯è¯´æ¯ åå ¨è¡¨æ«æ/åªä½¿ç¨ä¸ä¸ªç´¢å¼çé度æ¯èµ·æ¥ï¼å»åæä¸¤ä¸ªç´¢å¼äºåæ æ´å èè´¹æ¶é´ï¼æä»¥ç»å¤§å¤æ°æ åµä¸æ°æ®åºé½æ¯æ¯ç¨ä¸ä¸ªç´¢å¼ã
-
å¦è¿æ¡è¯å¥ï¼
select count(1) from table1 where column1 = 1 and column2 = 'foo' and column3 = 'bar'
-
æä»¬æ¥æ³è±¡ä¸ä¸å½æ°æ®åºæN个索å¼å¹¶ä¸æ¥è¯¢ä¸åå«é½è¦ç¨ä¸ä»ä»¬çæ åµï¼
æ¥è¯¢ä¼åå¨ï¼ç¨å¤§ç½è¯è¯´å°±æ¯çææ§è¡è®¡åçé£ä¸ªä¸è¥¿ï¼éè¦è¿è¡N次主äºåæ æ¥æ¾[è¿é主äºåæ çæææ¯æå¤å±çç´¢å¼èç¹]ï¼æ¤å¤çæ¥æ¾æµç¨å¤§æ¦å¦ä¸ï¼
æ¥åºç¬¬ä¸æ¡column1主äºåæ çäº1çå¼ï¼ç¶åå»ç¬¬äºæ¡column2主äºåæ æ¥åºfooçå¼å¹¶ä¸å½åè¡çcoumn1å¿ é¡»çäº1ï¼æåå»column主äºåæ æ¥æ¾barçå¼å¹¶ä¸column1å¿ é¡»çäº1åcolumn2å¿ é¡»çäºfooã
å¦æè¿æ ·çæµç¨è¢«æ¥è¯¢ä¼å卿§è¡ä¸éï¼å°±ç®ä¸æ»ä¹åæ¡å½äºï¼æ¥è¯¢ä¼åå¨å¯çä¸åæä»¥ä¸è®¡å齿§è¡ä¸éï¼è´ªå©ªç®æ³ï¼æè¿é»å± ç®æ³ï¼å¯ä¸å 许è¿ç§æ åµçåçï¼æä»¥å½éå°ä»¥ä¸è¯å¥çæ¶åï¼æ°æ®åºåªè¦ç¨å°ç¬¬ä¸ä¸ªçéåçç´¢å¼ï¼column1ï¼ï¼å°±ä¼ç´æ¥å»è¿è¡è¡¨æ«æäºã -
æä»¥ä¸å ¶è¯´æ¯æ°æ®åºåªæ¯æä¸æ¡æ¥è¯¢è¯å¥åªä½¿ç¨ä¸ä¸ªç´¢å¼ï¼åä¸å¦è¯´Næ¡ç¬ç«ç´¢å¼åæ¶å¨ä¸æ¡è¯å¥ä½¿ç¨çæ¶èæ¯åªä½¿ç¨ä¸ä¸ªç´¢å¼è¿è¦æ ¢ã
æä»¥å¦ä¸æ¡çæ åµï¼æä½³æ¨èæ¯ä½¿ç¨index(column1,column2,column3ï¼ è¿ç§èåç´¢å¼ï¼æ¤èåç´¢å¼å¯ä»¥æb+treeç»æçä¼å¿åæ¥å¾æ·æ¼å°½è´ï¼
䏿¡ä¸»äºåæ ï¼column=1ï¼ï¼æ¥è¯¢å°column=1èç¹ååºäºå½åèç¹è¿è¡äºçº§äºåæ column2=fooçæ¥è¯¢ï¼å¨äºçº§äºåæ æ¥è¯¢å°column2=fooåï¼å»ä¸çº§äºåæ column3=baræ¥æ¾ã -
å½ç¶å»ºäºèåç´¢å¼ä¹éè¦çæ°æ®çåå¸ï¼ç´¢å¼çå¯ç¨åº¦é«ä½ï¼å°½éæåºå度é«çåæ®µæ¾åé¢ï¼æè æ ¹æ®å®é çä¸å¡åºæ¯æ¥ååºå¯¹å段çå åæåºã
ç´¢å¼ä¸æ¨ä¼ææ ·ï¼
-
ç´¢å¼ä¸æ¨ï¼index condition pushdown ï¼ç®ç§°ICPï¼å¨Mysql5.6ççæ¬ä¸æ¨åºï¼ç¨äºä¼åæ¥è¯¢ã
-
å¨ä¸ä½¿ç¨ICPçæ åµä¸ï¼å¨ä½¿ç¨é主é®ç´¢å¼ï¼å嫿®éç´¢å¼æè äºçº§ç´¢å¼ï¼è¿è¡æ¥è¯¢æ¶ï¼åå¨å¼æéè¿ç´¢å¼æ£ç´¢å°æ°æ®ï¼ç¶åè¿åç»MySQLæå¡å¨ï¼æå¡å¨ç¶åå¤ææ°æ®æ¯å¦ç¬¦åæ¡ä»¶ ã
-
å¨ä½¿ç¨ICPçæ åµä¸ï¼å¦æå卿äºè¢«ç´¢å¼çåç夿æ¡ä»¶æ¶ï¼MySQLæå¡å¨å°è¿ä¸é¨å夿æ¡ä»¶ä¼ éç»åå¨å¼æï¼ç¶åç±åå¨å¼æéè¿å¤æç´¢å¼æ¯å¦ç¬¦åMySQLæå¡å¨ä¼ éçæ¡ä»¶ï¼åªæå½ç´¢å¼ç¬¦åæ¡ä»¶æ¶æä¼å°æ°æ®æ£ç´¢åºæ¥è¿åç»MySQLæå¡å¨ ã
-
ç´¢å¼æ¡ä»¶ä¸æ¨ä¼åå¯ä»¥åå°åå¨å¼ææ¥è¯¢åºç¡è¡¨ç次æ°ï¼ä¹å¯ä»¥åå°MySQLæå¡å¨ä»åå¨å¼ææ¥æ¶æ°æ®ç次æ°ã
æ¨èé è¯»ï¼æ¥çåæå¯è®¿é®ï¼
MySQL ä¼åä¹ index merge(ç´¢å¼åå¹¶)
MySQL 8.0ç´¢å¼åå¹¶
Mysqlæ§è½ä¼åï¼ä»ä¹æ¯ç´¢å¼ä¸æ¨ï¼
使ç¨MySQL 5.7èæåæé«æ¥è¯¢æç
Java å
¨æ ç¥è¯ä½ç³»
ä¸ç¯ç¬å½
SQLä¼åææ³æ±æ»