mysql 聯合索引的命中規則
阿新 • • 發佈:2019-01-25
首先明確:為什麼要用聯合索引?
對於查詢語句“SELECT E.* FROM E WHERE E.e1=1 AND E.e3=2”涉及到兩列,這個時候我們一般採用一個聯合索引(e1, e3);而不用兩個單列索引,這是因為一條查詢語句往往應為mysql優化器的關係只用一個索引,就算你有兩個索引,他也只用一個;在只用一個的基礎之上,聯合索引是會比單列索引要快的;
下面講講聯合索引的使用規則和哪些情況會命中不了聯合索引
示例如下。首先建立表:
CREATE TABLE E (e1 INT, e2 VARCHAR(9), e3 INT, PRIMARY KEY(e1, e3));
這樣就建立了一個聯合索引:e1,e3
觸發聯合索引是有條件的:
1、使用聯合索引的全部索引鍵,可觸發索引的使用。
例如:SELECT E.* FROM E WHERE E.e1=1 AND E.e3=2
2、使用聯合索引的字首部分索引鍵,如“key_part_1 <op>常量”,可觸發索引的使用。
例如:SELECT E.* FROM E WHERE E.e1=1
3、使用部分索引鍵,但不是聯合索引的字首部分,如“key_part_2 <op>常量”,不可觸發索引的使用。
例如:SELECT E.* FROM E WHERE E.e3=1
4、使用聯合索引的全部索引鍵,但索引鍵不是AND操作,不可觸發索引的使用。
例如:SELECT E.* FROM E WHERE E.e3=2 OR E.e1=1