where條件==order by 條件==group by 條件 按順序遵守 最佳左前綴法則
成都創(chuàng)新互聯(lián)公司專注于??h網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗(yàn)。 熱誠為您提供??h營銷型網(wǎng)站建設(shè),??h網(wǎng)站制作、??h網(wǎng)頁設(shè)計(jì)、??h網(wǎng)站官網(wǎng)定制、小程序定制開發(fā)服務(wù),打造浚縣網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供??h網(wǎng)站排名全網(wǎng)營銷落地服務(wù)。
假設(shè)創(chuàng)建了復(fù)合索引:a,b,c
不在索引列上做任何的操作(計(jì)算、函數(shù)、顯式或隱式的類型轉(zhuǎn)換),否則會(huì)導(dǎo)致索引失效而轉(zhuǎn)向全表掃描
1、字符不加單引號會(huì)導(dǎo)致索引失效
name字段為varchar類型
這條sql發(fā)生了隱式的類型轉(zhuǎn)換:數(shù)值==字符串。所以導(dǎo)致了全表掃描,索引失效
應(yīng)盡量避免在 where 子句中對字段進(jìn)行表達(dá)式操作,這將導(dǎo)致引擎放棄使用索引而進(jìn)行全表掃描。如:
mysql中的范圍條件有:in/not in、 like、 、BETWEEN AND ;
后面的索引失效
in會(huì)導(dǎo)致索引全部失效?。?!
BETWEEN AND 范圍條件不會(huì)導(dǎo)致索引失效!??!
盡量讓索引列和查詢列一致;減少select * 的使用
1、查詢表結(jié)構(gòu)
2、查詢表的索引結(jié)構(gòu)
聯(lián)合索引:name,age,post;說明add_time字段沒有添加索引
3、查看select * 的執(zhí)行計(jì)劃
4、查看 select name,age,pos的執(zhí)行計(jì)劃
5、如果select只用一部分索引
like以通配符開頭(’%abc…’)mysql索引失效會(huì)變成全表掃描的操作。
解決:可以使用 覆蓋索引 來解決這個(gè)問題!
1、先查看表上的索引
id、name、age、pos 四個(gè)字段上都有索引; 注意:name是聯(lián)合索引中的第一個(gè),帶頭大哥!
2、查看表結(jié)構(gòu)
有個(gè)add_time字段沒有用到索引
3、查看執(zhí)行計(jì)劃
使用UNION ALL
假設(shè)創(chuàng)建了聯(lián)合索引 x(a,b,c)
ps:like雖然也是范圍查詢但是區(qū)別于、,%用在最前面就只用到索引a了;%用在最后面可以用到a+b+c!
下面的sql幾乎違背了上面的所有原則,索引依然全部生效。因?yàn)閟elect是索引覆蓋的,select里不包含沒有建立索引的字段。因此總是用到索引的。可以看出來索引覆蓋在sql優(yōu)化中的作用性
具體原因是:
1、索引列值為null,此時(shí)會(huì)索引失效。
2、sql的語句中寫了or,如果or后的字段不全是帶索引字段,此時(shí)索引失效。
3、模糊查詢是like以%XX開頭,就是說左模糊不太行,右模糊可以。
4、存在類型轉(zhuǎn)換,比如你的索引字段是varchar型,但是你搜索條件卻是userid=333,那這樣索引不生效。
5、數(shù)據(jù)量極少時(shí),Mysql不會(huì)使用索引,因?yàn)槿頀呙杷俣雀臁?/p>
6、where條件中的索引運(yùn)算設(shè)計(jì)計(jì)算時(shí),索引失效。索引列不要使用函數(shù)。
首先我們還是先把表結(jié)構(gòu)說下:用戶表tb_user結(jié)構(gòu)如下:
1、 不要在索引列上進(jìn)行運(yùn)算操作, 索引將失效。
手機(jī)號phone字段有唯一索引,當(dāng)根據(jù)phone字段進(jìn)行函數(shù)運(yùn)算操作之后,索引失效:
2、 字符串類型字段使用時(shí),不加引號,索引將失效。
如果字符串不加單引號,對于查詢結(jié)果,沒什么影響,但是數(shù) 據(jù)庫存在隱式類型轉(zhuǎn)換,索引將失效。
3、 如果僅僅是尾部模糊匹配,索引不會(huì)失效。如果是頭部模糊匹配,索引失效。
接下來,我們來看一下這三條SQL語句的執(zhí)行效果,查看一下其執(zhí)行計(jì)劃:
由于下面查詢語句中,都是根據(jù)profession(專業(yè))字段查詢,profession字段是一個(gè)普通的索引, 我們主要看一下,模糊查詢時(shí),%加在關(guān)鍵字之前,和加在關(guān)鍵字之后的影響。
經(jīng)過上述的測試,我們發(fā)現(xiàn),在like模糊查詢中,在關(guān)鍵字后面加%,索引可以生效。而如果在關(guān)鍵字 前面加了%,索引將會(huì)失效。
4、 用or分割開的條件, 如果or前的條件中的列有索引,而后面的列中沒有索引,那么涉及的索引都不會(huì) 被用到。
由于age沒有索引,所以即使id有索引,索引也會(huì)失效。所以需要針對于age也要建立索引。
5、 數(shù)據(jù)分布影響:如果MySQL評估使用索引比全表更慢,則不使用索引。
文章題目:mysql索引失效怎么辦 數(shù)據(jù)庫索引失效應(yīng)該怎么處理
文章位置:http://jinyejixie.com/article10/dodhdgo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供定制開發(fā)、手機(jī)網(wǎng)站建設(shè)、微信小程序、靜態(tài)網(wǎng)站、網(wǎng)站設(shè)計(jì)公司、品牌網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)