轉於:https://blog.csdn.net/claram/article/details/77574600
首先明確:為什么要用聯合索引?
對於查詢語句“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
測試數據
INSERT INTO E
(e1, e2, e3)
VALUES(1, 'aa', 2);
觸發聯合索引是有條件的:
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
以上通過explain測試即可看出效果