MySQL索引失效的問題解決
一、索引列上運(yùn)算操作
不要在索引列上進(jìn)行運(yùn)算操作,否則索引會(huì)失效。
在tb_user的phone列加上索引,然后進(jìn)行條件查詢,在這個(gè)情況下,是可以走索引的。

但是在對(duì)索引列進(jìn)行操作的時(shí)候,比如截取字符串,就會(huì)導(dǎo)致索引失效。如下:

二、字符串不加單引號(hào)
有的時(shí)候我們編寫字符串不規(guī)范,會(huì)不加單引號(hào),可以查詢出來,但是它的執(zhí)行計(jì)劃不同。會(huì)導(dǎo)致全文掃描。
如下:
在加上單引號(hào)的情況

在不加上單引號(hào)的情況,如圖,是進(jìn)行的全文掃描。

三、模糊匹配
如果僅僅是尾部模糊匹配,索引不會(huì)失效,如果是頭部模糊匹配,索引失效。
如下:如果僅僅是模糊匹配,是可以進(jìn)行匹配到的。

如果頭部模糊,如下:索引失效。

注意: 在大量數(shù)據(jù)下,一定要規(guī)避頭部模糊查詢,會(huì)導(dǎo)致索引失效。
四、or連接的條件
用or分隔開的條件,如果or一側(cè)的列有索引,但是另一側(cè)的列沒有索引,那么設(shè)計(jì)的索引都不會(huì)被用到。
首先age是沒有索引的,僅僅依靠age,復(fù)合索引是不生效的。

然后進(jìn)行explain的執(zhí)行計(jì)劃的查看發(fā)現(xiàn)涉及到的索引并沒有生效。

換個(gè)位置同理:

創(chuàng)建age的索引,注意idx_user_age的索引命名規(guī)范,我就隨便寫了,運(yùn)行后如下:索引執(zhí)行

五、數(shù)據(jù)分布影響
如果MySQL評(píng)估使用索引比全表掃描更慢,則不使用索引,走全表掃描。



如上三圖,經(jīng)過測(cè)試我們發(fā)現(xiàn),相同的SQL語句,只是傳入的字段值不同,最終的執(zhí)行計(jì)劃也完全不一樣,這是為 什么呢?
這是個(gè)在MYSQL查詢的時(shí)候,會(huì)對(duì)語句進(jìn)行評(píng)估,如果走全表掃描的時(shí)間比走索引慢,則放棄鎖引,走全表掃描。
因?yàn)樗饕怯脕硭饕倭繑?shù)據(jù)的,如果通過索引查詢返回大批量的數(shù)據(jù),則還不 如走全表掃描來的快,此時(shí)索引就會(huì)失效。
到此這篇關(guān)于MySQL索引失效的問題解決的文章就介紹到這了,更多相關(guān)MySQL索引失效內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
MySQL優(yōu)化必須調(diào)整的10項(xiàng)配置
這篇文章主要介紹了MySQL優(yōu)化必須調(diào)整的10項(xiàng)配置,使用這些方法可以讓你快速地獲得一個(gè)穩(wěn)健的MySQL配置,需要的朋友可以參考下2014-02-02
快速增加MYSQL數(shù)據(jù)庫(kù)連接數(shù)負(fù)載能力的方法分享
mysql數(shù)據(jù)庫(kù)的負(fù)載能力除了和你機(jī)器硬件有關(guān),還有一個(gè)重要參數(shù)就是你系統(tǒng)的配置有關(guān),下面我來給大家介紹幾種提高M(jìn)YSQL數(shù)據(jù)庫(kù)連接數(shù)負(fù)載能力方法總結(jié),有需要的朋友可以參考一下2013-08-08
如何使用myisamchk和mysqlcheck工具快速修復(fù)損壞的MySQL數(shù)據(jù)庫(kù)文件
有時(shí)候數(shù)據(jù)庫(kù)突然就壞了很郁悶,用mysqlcheck.exe可以修復(fù)受損數(shù)據(jù)庫(kù)2020-01-01
Mysql分組查詢每組最新一條數(shù)據(jù)的三種實(shí)現(xiàn)方法
我們?cè)陂_發(fā)中經(jīng)常會(huì)遇到分組查詢最新數(shù)據(jù)的問題,下面這篇文章主要給大家介紹了關(guān)于Mysql分組查詢每組最新一條數(shù)據(jù)的三種實(shí)現(xiàn)方法,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-01-01
使用Grafana+Prometheus監(jiān)控mysql服務(wù)性能
這篇文章主要介紹了使用Grafana+Prometheus監(jiān)控mysql服務(wù)性能的相關(guān)知識(shí),本文給大家介紹的非常詳細(xì),對(duì)大家的工作或?qū)W習(xí)具有一定的參考借鑒價(jià)值,需要的朋友可以參考下方法2020-03-03
不使用MySQL數(shù)據(jù)庫(kù)的五個(gè)給力理由解析
眾所周知,MySQL數(shù)據(jù)庫(kù)雖然功能未必很強(qiáng)大,但因?yàn)樗拈_源、廣泛傳播,導(dǎo)致很多人都了解到這個(gè)數(shù)據(jù)庫(kù)。2011-03-03

