mysql索引失效的幾種情況分析

2022-09-24 10:27:09 字數 1116 閱讀 6528

1、最佳左字首原則——如果索引了多列,要遵守最左字首原則。指的是查詢要從索引的最左前列開始並且不跳過索引中的列。

前提條件:表中已新增復合索引(use程式設計客棧rname,password,age)

分析:該查詢缺少username,查詢條件復合索引最左側username缺少,違反了最佳左字首原則,導致索引失效,變為all,全表掃瞄

分析:查詢條件缺少username,password,查詢條件復合索引最左側username,password缺少,違反了最佳左字首原則,導致索引失效,變為all,全表掃瞄

分析:該查詢只有乙個username條件,根據最佳左字首原則索引能夠被使用到,但是是部分使用

2、不在索引列上做任何操作(計算,函式,(自動或者手動)型別裝換),會導致索引失效而導致全表掃瞄

分析:第www.cppcns.com乙個圖索引列不使用函式,遵循左字首原則,能夠使用索引。第二張圖索引列上使用了函式,即使遵循左字首原則,索引www.cppcns.com還是失效

3、儲存引擎不能使用索引中範圍條件右邊的列,範圍之後索引失效。(< ,> between and)

分析:圖一索引全部使用到。圖二索引使用到username和age,但是username是使用索引檢索,而age著重索引排序,這時age為範圍查詢,password索引將失效

4、mysql使用不等於(!= 或者<>)的時候,無法使用索引,會導致索引失效

5、mysql中使用is not null 或者 is null會導致無法使用索引

分析:對username列做了普www.cppcns.com通索引,查詢帶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索引失效的幾種情況

更準確的說,單列索引不儲存null值,復合索引不儲存全為null的值。索引不能儲存null,所以對這列採用is null條件時,因為索引上根本 沒null值,不能利用到索引,只能全表掃瞄。為什麼索引列不能存null值?將索引列值進行建樹,其中必然涉及到諸多的比較操作。null值的特殊性就在於參與的運...

MySQL索引失效的幾種情況

a.單列索引無法儲null值,復合索引無法儲全為null的值。b.查詢時,採用is null條件時,不能利用到索引,只能全表掃瞄。為什麼索引列無法儲存null值?a.索引是有序的。null值進入索引時,無法確定其應該放在 將索引列值進行建樹,其中必然涉及到諸多的比較操作,null 值是不確定值無法 ...

MySQL索引失效的幾種情況

更準確的說,單列索引不儲存null值,復合索引不儲存全為null的值。索引不能儲存null,所以對這列採用is null條件時,因為索引上根本 沒null值,不能利用到索引,只能全表掃瞄。為什麼索引列不能存null值?將索引列值進行建樹,其中必然涉及到諸多的比較操作。null值的特殊性就在於參與的運...