前提:創建了一個employee表,同時創建了一個組合索引lastName,gender 。mysql
1.最常說的like匹配sql
例1 explain select * from employee where lastName like '%lucy';mysql優化
例2 explain select * from employee where lastName like 'lucy%'優化
結論:例1索引失效 ,例2索引生效(匹配列前綴 'lucy%')spa
2. 強制類型轉換會讓索引失效
3d
例如:explain select * from employee where gender =1 or lastName = 'lucy' blog
例如:explain select * from employee where gender =1 and lastName = 'lucy' 索引
結論:當mysql優化器自動進行強制類型轉換時,索引失效。ast
3.最左匹配原則select
例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;
以上只是我的的一些簡單總結 ,若是有什麼問題但願指出,若是有什麼問題能夠一塊兒討論。