面試題 引起mysql索引失效的幾種情況

2021-10-04 23:31:04 字數 496 閱讀 4035

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

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

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

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

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

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

對索引字段進行計算操作。

在索引欄位上使用函式。

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

Mysql引起索引失效的原因總結

在資料庫中做查詢等操作,經常發現查詢很慢,但是已經在列上建了索引,最後經過研究發現,很多種情況引起了索引失效。下面就對遇到的引起索引失效的原因做一下總結 不包括索引本身無效的情況 歡迎博友們補充。1 對單字段建了索引,where條件多欄位。例 建了以下索引 查詢語句 html view plain ...

Mysql引起索引失效的原因總結

sql語句where中如果有functionname colname 或者某些運算,則mysql無法使用基於colname的索引。使用索引需要直接查詢某個字段。索引失效的原因是索引是針對原值建的二叉樹,將列值計算後,原來的二叉樹就用不上了 為了解決索引列上計算引起的索引失效問題,將計算放到索引列外的...

Mysql引起索引失效的原因總結

1 對單字段建了索引,where條件多欄位。2 建立聯合索引,where條件單字段。與上面情況正好相反。最左原則 例如 索引 a.b.c。條件 ab,ac,a,都會生效,bc不會生效 3 對索引列運算,運算包括 like 放在前面 or in exist等 導致索引失效。4 型別錯誤,如欄位型別為v...