首頁  >  文章  >  資料庫  >  mysql索引失效的情況有哪些

mysql索引失效的情況有哪些

青灯夜游
青灯夜游原創
2022-01-05 15:46:5557456瀏覽

索引失效的情況:1、like查詢以「%」開頭;2、or語句前後沒有同時使用索引;3、組合索引中不是使用第一列索引;4、在索引列上使用“IS NULL”或“IS NOT NULL”操作;5、在索引欄位上使用“not”,“<>”,“!=”等等。

mysql索引失效的情況有哪些

本教學操作環境:windows7系統、mysql8版本、Dell G3電腦。

索引是一種特殊的資料庫結構,由資料表中的一列或多列組合而成,可以用來快速查詢資料表中有某一特定值的記錄。本節將詳細講解索引的意思、作用和優缺點。

透過索引,查詢資料時不用讀完記錄的所有信息,而只是查詢索引列。否則,資料庫系統將讀取每筆記錄的所有資訊進行比對。

可以把索引比喻為新華字典的音序表。例如,要查「庫」字,如果不使用音序,就需要從字典的 400 頁中逐頁來找。但是,如果提取拼音出來,構成音序表,就只需要從 10 多頁的音序表中直接找到。這樣就可以大大節省時間。

因此,使用索引可以大幅提高資料庫的查詢速度,也有效的提高了資料庫系統的效能。

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

#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會使用全表掃描,此時索引失效。

如果mysql估計使用全表掃描要比使用索引快,則不使用索引

#【相關推薦:mysql影片教學

以上是mysql索引失效的情況有哪些的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn