您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關mysql中出現索引失效的原因是什么,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。
1、最佳左前綴原則——如果索引了多列,要遵守最左前綴原則。指的是查詢要從索引的最左前列開始并且不跳過索引中的列。
前提條件:表中已添加復合索引(username,password,age)
分析:該查詢缺少username,查詢條件復合索引最左側username缺少,違反了最佳左前綴原則,導致索引失效,變為ALL,全表掃描
分析:查詢條件缺少username,password,查詢條件復合索引最左側username,password缺少,違反了最佳左前綴原則,導致索引失效,變為ALL,全表掃描
分析:該查詢只有一個username條件,根據最佳左前綴原則索引能夠被使用到,但是是部分使用
2、不在索引列上做任何操作(計算,函數,(自動或者手動)類型裝換),會導致索引失效而導致全表掃描
分析:第一個圖索引列不使用函數,遵循左前綴原則,能夠使用索引。第二張圖索引列上使用了函數,即使遵循左前綴原則,索引還是失效
3、存儲引擎不能使用索引中范圍條件右邊的列,范圍之后索引失效。(< ,> between and)
分析:圖一索引全部使用到。圖二索引使用到username和age,但是username是使用索引檢索,而age著重索引排序,這時age為范圍查找,password索引將失效
4、mysql使用不等于(!= 或者<>)的時候,無法使用索引,會導致索引失效
5、mysql中使用is not null 或者 is null會導致無法使用索引
分析:對username列做了普通索引,查詢帶is not null,結果索引不生效
6、mysql中like查詢是以%開頭,索引會失效變成全表掃描,覆蓋索引。
分析:對username列做了普通索引,以%開頭進行查詢,結果索引失效被覆蓋
7、mysql中,字符串不加單引號索引會失效。正確寫法:select * from t_user where username = 'lujin';
8、mysql中,如果條件中有or,即使其中有條件帶索引也不會使用(這也是為什么盡量少用or的原因)。要想使用or,又想讓索引生效,只能將or條件中的每個列都加上索引
9、如果mysql使用全表掃描要比使用索引快,則不會使用到索引
關于mysql中出現索引失效的原因是什么就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。