Mysql索引失效的狀況

前提:創建了一個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;

            

 以上只是我的的一些簡單總結 ,若是有什麼問題但願指出,若是有什麼問題能夠一塊兒討論。

    

 

 

相關文章
相關標籤/搜索