mysql索引使用技巧

這里重點(diǎn)討論的是復(fù)合索引。(這里的索引都是指BTREE索引)

準(zhǔn)備工作

首先毕荐,我們需要建立一張表翘地,表非常簡單,沒有任何意義

create table t(
c1 char(20),
c2 char(20),
c3 char(20),
c4 char(20),
key idx_t_c1234(c1, c2, c3, c4)
);

其次滚粟,你需要對(duì)explain關(guān)鍵字有一定的了解(可以查看我另一篇文章explain詳解

下面進(jìn)入重點(diǎn)

左前綴法則

如果索引存在多列寻仗,查詢要從索引的最左前列開始,并且不能跳過索引中的列
索引中的四個(gè)字段都使用:

圖片.png

key表示用到了索引idx_t_c1234,ref列是四個(gè)const表示4個(gè)條件都是常量凡壤,key_len表示使用索引大概的字節(jié)數(shù)署尤,extra中Using where 表示使用了where條件,Using index表示覆蓋索引亚侠,說明select查詢的字段都在索引中可以獲取曹体,不需要去磁盤中找。

中間差個(gè)條件呢,如:

select * from t where c1='a' and c2='b' and c4='d';
圖片.png

此時(shí)key_len的長度是122硝烂,而上面是244箕别;ref中是兩個(gè)const,可以得到此時(shí)只是使用了索引中的c1和c2兩個(gè)字段滞谢。c4失效了串稀。因?yàn)椴盍薱3,中間斷了狮杨,導(dǎo)致索引失效

如果是這樣的呢

select * from t where c1='a' and c2 > 'b' and c3 = 'c';
圖片.png

可以看到key_len是61母截,ref只有一個(gè)const,表示只用到了c1橄教;范圍之后索引全失效清寇,這個(gè)也類似于中間斷了。(如果是5.7以前的版本的話颤陶,這里type會(huì)range颗管,而key_len會(huì)是122,用到了c1和c2兩個(gè)字段)

下面的SQL滓走,有興趣的可以試下

explain select * from t where c2='b' and c3='c' and c4='d';

跟上面類似垦江,從源頭就斷了,索引肯定會(huì)失效;type變?yōu)閕ndex(為啥不是all比吭?可以思考下)
如果修改表結(jié)構(gòu):

alter table add column c5 char(20);

再執(zhí)行上面的sql看看(好好理解兩者的不同)

左前綴法則非常有用绽族,在order by和group by還會(huì)用到

覆蓋索引

覆蓋索引這個(gè)概念其實(shí)非常簡單,但確非常有用衩藤;覆蓋索引是指select查詢的字段都來自index(索引)吧慢,不需要去磁盤中查找,從而提高效率赏表。
在explain關(guān)鍵字中的extra列中如果出現(xiàn)了Using index检诗,表示用到了覆蓋索引。

圖片.png
圖片.png

盡量少用select *,用select *一般都會(huì)導(dǎo)致無法用覆蓋索引(除非所有字段都建索引瓢剿,這很明顯不是明智的做法)

索引列少操作

一般來說逢慌,索引列上做任何操作(計(jì)算、函數(shù)间狂、類型轉(zhuǎn)換(自動(dòng)或手動(dòng)))攻泼,都可能會(huì)導(dǎo)致索引類失效。

圖片.png

少用不等

在索引列上使用!= 或 <> 都可能導(dǎo)致索引失效

圖片.png

慎用null

使用is null 或者is not null也可能會(huì)導(dǎo)致索引失效
自mysql5.6之后鉴象,增加了Using index condition忙菠,使用is null 或者is not null會(huì)使用Using index condition進(jìn)行
優(yōu)化,但是還是慎用纺弊,雖然優(yōu)化了牛欢,依然會(huì)影響效率。

圖片.png

like操作

like操作很可能會(huì)導(dǎo)致索引失效

圖片.png

用like盡量不要在開頭加匹配符

圖片.png

如果這樣寫呢

explain select * from t where c1 like 'a%' and c2 > 'b' and c3 = 'c';

有興趣的可以自己去嘗試下俭尖。
如果非要首位寫匹配符呢氢惋,建議用覆蓋索引。

字符串一定要加單引號(hào)

字符串不加單引號(hào)會(huì)導(dǎo)致索引失效(自動(dòng)類型轉(zhuǎn)換)稽犁,這個(gè)錯(cuò)誤非常難發(fā)現(xiàn),一定要養(yǎng)成好的習(xí)慣

圖片.png

少用or

用or來連接會(huì)導(dǎo)致索引失效

圖片.png

最后說一個(gè)新手常犯的錯(cuò)誤骚亿,在where條件的列上都加上索引已亥。
對(duì)于btree索引而言,獨(dú)立的索引只能用一個(gè)来屠,也就是說虑椎,where條件的列上都加上索引,只能用上一個(gè)索引俱笛,正確的做法是用復(fù)合索引捆姜。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市迎膜,隨后出現(xiàn)的幾起案子泥技,更是在濱河造成了極大的恐慌,老刑警劉巖磕仅,帶你破解...
    沈念sama閱讀 216,402評(píng)論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件珊豹,死亡現(xiàn)場離奇詭異簸呈,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)店茶,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門蜕便,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人贩幻,你說我怎么就攤上這事轿腺。” “怎么了丛楚?”我有些...
    開封第一講書人閱讀 162,483評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵族壳,是天一觀的道長。 經(jīng)常有香客問我鸯檬,道長决侈,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,165評(píng)論 1 292
  • 正文 為了忘掉前任喧务,我火速辦了婚禮赖歌,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘功茴。我一直安慰自己庐冯,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,176評(píng)論 6 388
  • 文/花漫 我一把揭開白布坎穿。 她就那樣靜靜地躺著展父,像睡著了一般。 火紅的嫁衣襯著肌膚如雪玲昧。 梳的紋絲不亂的頭發(fā)上栖茉,一...
    開封第一講書人閱讀 51,146評(píng)論 1 297
  • 那天,我揣著相機(jī)與錄音孵延,去河邊找鬼吕漂。 笑死,一個(gè)胖子當(dāng)著我的面吹牛尘应,可吹牛的內(nèi)容都是我干的惶凝。 我是一名探鬼主播,決...
    沈念sama閱讀 40,032評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼犬钢,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼苍鲜!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起玷犹,我...
    開封第一講書人閱讀 38,896評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤混滔,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體遍坟,經(jīng)...
    沈念sama閱讀 45,311評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡拳亿,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,536評(píng)論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了愿伴。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片肺魁。...
    茶點(diǎn)故事閱讀 39,696評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖隔节,靈堂內(nèi)的尸體忽然破棺而出鹅经,到底是詐尸還是另有隱情,我是刑警寧澤怎诫,帶...
    沈念sama閱讀 35,413評(píng)論 5 343
  • 正文 年R本政府宣布瘾晃,位于F島的核電站,受9級(jí)特大地震影響幻妓,放射性物質(zhì)發(fā)生泄漏蹦误。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,008評(píng)論 3 325
  • 文/蒙蒙 一肉津、第九天 我趴在偏房一處隱蔽的房頂上張望强胰。 院中可真熱鬧,春花似錦妹沙、人聲如沸偶洋。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽玄窝。三九已至,卻和暖如春悍引,著一層夾襖步出監(jiān)牢的瞬間恩脂,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,815評(píng)論 1 269
  • 我被黑心中介騙來泰國打工趣斤, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留东亦,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,698評(píng)論 2 368
  • 正文 我出身青樓唬渗,卻偏偏與公主長得像,于是被迫代替她去往敵國和親奋渔。 傳聞我的和親對(duì)象是個(gè)殘疾皇子镊逝,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,592評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容