您好,登錄后才能下訂單哦!
本篇內容介紹了“mysql索引失效的現象有哪些”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
索引失效的情況:1、like查詢以“%”開頭;2、or語句前后沒有同時使用索引;3、組合索引中不是使用第一列索引;4、在索引列上使用“IS NULL”或“IS NOT NULL”操作;5、在索引字段上使用“not”,“<>”,“!=”等等。
本教程操作環境:windows7系統、mysql8版本、Dell G3電腦。
索引是一種特殊的數據庫結構,由數據表中的一列或多列組合而成,可以用來快速查詢數據表中有某一特定值的記錄。本節將詳細講解索引的含義、作用和優缺點。
通過索引,查詢數據時不用讀完記錄的所有信息,而只是查詢索引列。否則,數據庫系統將讀取每條記錄的所有信息進行匹配。
可以把索引比作新華字典的音序表。例如,要查“庫”字,如果不使用音序,就需要從字典的 400 頁中逐頁來找。但是,如果提取拼音出來,構成音序表,就只需要從 10 多頁的音序表中直接查找。這樣就可以大大節省時間。
因此,使用索引可以很大程度上提高數據庫的查詢速度,還有效的提高了數據庫系統的性能。
索引查詢失效的幾個情況:
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索引失效的現象有哪些”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。