前提:建立了一個employee表,同時建立了一個組合索引lastName,gender 。 1.最常說的like匹配 例1 explain select * from employee where lastName like '%lucy'; 例2 explain select * from em ...
前提:建立了一個employee表,同時建立了一個組合索引lastName,gender 。
1.最常說的like匹配
例1 explain select * from employee where lastName like '%lucy';
例2 explain select * from employee where lastName like 'lucy%'
結論:例1索引失效 ,例2索引生效(匹配列首碼 'lucy%')
2. 強制類型轉換會讓索引失效
例如:explain select * from employee where gender =1 or lastName = 'lucy'
例如:explain select * from employee where gender =1 and lastName = 'lucy'
結論:當mysql優化器自動進行強制類型轉換時,索引失效。
3.最左匹配原則
例1 explain select * from employee where lastName = 'lucy' and gender =1;
例2 explain select * from employee where gender =1 and lastName = 'lucy';
例3 explain select * from employee where lastName = 'lucy';
例4 explain select * from employee where gender =1;
結論:當建立一個組合索引時,根據例1和例2 得出 where條件後面的排放順序不會影響索引的命中;根據例3 例4 得出如果組合索引中有部分欄位缺失,按照建索引的順序從左到右,依次匹配如果前一個列不匹配,則後一個列索引失效。
4. where條件中使用or即使有索引也會失效
explain select * from employee where lastName = 'lucy' or gender =1;
以上只是個人的一些簡單總結 ,如果有什麼問題希望指出,如果有什麼問題可以一起討論。