Mysql索引查詢失效的情況

2022-08-04 11:27:12 字數 1814 閱讀 7432

首先,複習一下索引的建立:

普通的索引的建立:

create index  (自定義)索引名  on  資料表(字段);

復合索引的建立:

create index  (自定義)索引名  on  資料表(字段,字段,。。。);

刪除索引:drop index 索引名;

以下通過explain顯示出mysql執行的字段內容:

索引查詢失效的幾個情況:

1、like 以%開頭,索引無效;當like字首沒有%,字尾有%時,索引有效。

2、or語句前後沒有同時使用索引。當or左右查詢字段只有乙個是索引,該索引失效,只有當or左右查詢欄位均為索引時,才會生效

3、組合索引,不是使用第一列索引,索引失效。

4、資料型別出現隱式轉化。如varchar不加單引號的話可能會自動轉換為int型,使索引無效,產生全表掃瞄。

5、在索引列上使用 is null 或 is not null操作。索引是不索引空值的,所以這樣的操作不能使用索引,可以用其他的辦法處理,例如:數字型別,判斷大於0,字串型別設定乙個預設值,判斷是否等於預設值即可。(此處是錯誤的!

解釋以上錯誤:

此處我將重新建立乙個emp表

建立新的索引

檢視索引

執行sql語句

由此可發現有使用到索引

總結:在索引列上使用 is null 或 is not null操作,索引不一定失效!!!

使用聯合查詢請參考:

錯誤詳解請參考:

6、在索引欄位上使用not,<>,!=。不等於操作符是永遠不會用到索引的,因此對它的處理只會產生全表掃瞄。 優化方法: key<>0 改為 key>0 or key<0。

7、對索引字段進行計算操作、欄位上使用函式。(索引為 emp(ename,empno,sal))

8、當全表掃瞄速度比索引速度快時,mysql會使用全表掃瞄,此時索引失效。

索引失效分析工具:

可以使用explain命令加在要分析的sql語句前面,在執行結果中檢視key這一列的值,如果為null,說明沒有使用索引。

explain命令的詳細用法,可以檢視這篇文章:

mysql索引失效情況

1 沒有查詢條件,或者查詢條件沒有建立索引 2 在查詢條件上沒有使用引導列 3 查詢的數量是大表的大部分,應該是30 以上。4 索引本身失效 5 查詢條件使用函式在索引列上,或者對索引列進行運算,運算包括 等 錯誤的例子 select from test where id 1 9 正確的例子 sel...

Mysql索引失效情況

mysql索引失效有以下幾種情況 但是如果想讓以 開頭仍然使用索引,則需要使用覆蓋索引,即只查詢帶索引欄位的列 explain select name from user where name like 張三 explain select name,age,address from user whe...

mysql索引失效的情況

1.如果條件中有or,即使其中有條件帶索引也不會使用 這也是為什麼盡量少用or的原因 注意 要想使用or,又想讓索引生效,只能將or條件中的每個列都加上索引 2.對於多列索引,不是使用的第一部分 第乙個 則不會使用索引 聯合索引 3.like查詢是以 開頭 4.如果列型別是字串,那一定要在條件中將資...