1. 程式人生 > >mysql 聯合索引的命中規則

mysql 聯合索引的命中規則

首先明確:為什麼要用聯合索引?

對於查詢語句“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