mysql聯合索引命中條件


轉於: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測試即可看出效果


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM