48-索引和慢查詢優(yōu)化

一澎迎、索引

1乱投、什么是索引

索引在MySQL中也叫做“鍵”送爸,是存儲引擎用于快速找到記錄的一種數(shù)據(jù)結(jié)構(gòu)铛嘱。索引對于良好的性能非常關(guān)鍵暖释,尤其是當表中的數(shù)據(jù)量越來越大時,索引對于性能的影響愈發(fā)重要墨吓。索引優(yōu)化應該是對查詢性能優(yōu)化最有效的手段了球匕。索引能夠輕易將查詢性能提高好幾個數(shù)量級。索引相當于字典的音序表帖烘,如果要查某個字亮曹,如果不使用音序表,則需要從幾百頁中逐頁去查秘症。

本質(zhì)都是:通過不斷地縮小想要獲取數(shù)據(jù)的范圍來篩選出最終想要的結(jié)果照卦,同時把隨機的事件變成順序的事件,也就是說乡摹,有了這種索引機制役耕,我們可以總是用同一種查找方式來鎖定數(shù)據(jù)。

使用索引是為了提升查詢效率聪廉,索引通常建在id這樣區(qū)分度高的字段上瞬痘,過多的添加索引會降低數(shù)據(jù)存入速度。索引的數(shù)據(jù)結(jié)構(gòu)是一顆b+數(shù)板熊,索引的字段要盡量的小图云,因為數(shù)據(jù)項占的空間越小,數(shù)據(jù)項的數(shù)量越多邻邮,樹的高度越低竣况,而索引查詢的I/O次數(shù)和樹的高度有關(guān)。

2筒严、索引的最左匹配特性

當b+樹的數(shù)據(jù)項是復合的數(shù)據(jù)結(jié)構(gòu)丹泉,比如(name,age,sex)的時候,b+數(shù)是按照從左到右的順序來建立搜索樹的鸭蛙,比如當(張三,20,F)這樣的數(shù)據(jù)來檢索的時候摹恨,b+樹會優(yōu)先比較name來確定下一步的所搜方向,如果name相同再依次比較age和sex娶视,最后得到檢索的數(shù)據(jù)晒哄;但當(20,F)這樣的沒有name的數(shù)據(jù)來的時候,b+樹就不知道下一步該查哪個節(jié)點肪获,因為建立搜索樹的時候name就是第一個比較因子寝凌,必須要先根據(jù)name來搜索才能知道下一步去哪里查詢。比如當(張三,F)這樣的數(shù)據(jù)來檢索時孝赫,b+樹可以用name來指定搜索方向较木,但下一個字段age的缺失,所以只能把名字等于張三的數(shù)據(jù)都找到青柄,然后再匹配性別是F的數(shù)據(jù)了伐债, 這個是非常重要的性質(zhì)预侯,即索引的最左匹配特性。

3峰锁、聚集索引

聚集索引就是按照每張表的主鍵構(gòu)造一棵B+樹萎馅,同時葉子節(jié)點中存放的即為整張表的行記錄數(shù)據(jù)。

優(yōu)點:

  • 對主鍵的排序查找和范圍查找速度非澈缃快校坑,葉子節(jié)點的數(shù)據(jù)就是用戶所要查詢的數(shù)據(jù)。
  • 范圍查詢(range query)千诬,即如果要查找主鍵某一范圍內(nèi)的數(shù)據(jù)耍目,通過葉子節(jié)點的上層中間節(jié)點就可以得到頁的范圍,之后直接讀取數(shù)據(jù)頁即可徐绑。
4邪驮、輔助索引

表中除了聚集索引外其他索引都是輔助索引(Secondary Index,也稱為非聚集索引)傲茄,與聚集索引的區(qū)別是:輔助索引的葉子節(jié)點不包含行記錄的全部數(shù)據(jù)毅访。葉子節(jié)點除了包含鍵值以外,每個葉子節(jié)點中的索引行中還包含一個書簽(bookmark)盘榨。該書簽用來告訴InnoDB存儲引擎去哪里可以找到與索引相對應的行數(shù)據(jù)喻粹。輔助索引的存在并不影響數(shù)據(jù)在聚集索引中的組織,因此每張表上可以有多個輔助索引草巡,但只能有一個聚集索引守呜。當通過輔助索引來尋找數(shù)據(jù)時,InnoDB存儲引擎會遍歷輔助索引并通過葉子級別的指針獲得只想主鍵索引的主鍵山憨,然后再通過主鍵索引來找到一個完整的行記錄查乒。

5、覆蓋索引

InnoDB存儲引擎支持覆蓋索引郁竟,即從輔助索引中就可以得到查詢的記錄玛迄,而不需要查詢聚集索引中的記錄。

優(yōu)點:

  • 1棚亩、可以減少大量IO操作
  • 2蓖议、有助于統(tǒng)計
6、聯(lián)合索引

聯(lián)合索引時指對表上的多個列合起來做一個索引讥蟆。聯(lián)合索引的創(chuàng)建方法與單個索引的創(chuàng)建方法一樣勒虾,不同之處在僅在于有多個索引列。好處是在第一個鍵相同的情況下攻询,已經(jīng)對第二個鍵進行了排序處理从撼。

7州弟、常用索引

普通索引INDEX:加速查找

唯一索引:

  • 主鍵索引PRIMARY KEY:加速查找+約束(不為空钧栖、不能重復)
  • 唯一索引UNIQUE:加速查找+約束(不能重復)

聯(lián)合索引:

  • PRIMARY KEY(id,name):聯(lián)合主鍵索引
  • UNIQUE(id,name):聯(lián)合唯一索引
  • INDEX(id,name):聯(lián)合普通索引

二低零、慢查詢優(yōu)化的基本步驟

  1. 先運行看看是否真的很慢,注意設(shè)置SQL_NO_CACHE
  2. where條件單表查拯杠,鎖定最小返回記錄表掏婶。這句話的意思是把查詢語句的where都應用到表中返回的記錄數(shù)最小的表開始查起,單表每個字段分別查詢潭陪,看哪個字段的區(qū)分度最高
  3. explain查看執(zhí)行計劃雄妥,是否與1預期一致(從鎖定記錄較少的表開始查詢)
  4. order by limit 形式的sql語句讓排序的表優(yōu)先查
  5. 了解業(yè)務(wù)方使用場景
  6. 加索引時參照建索引的幾大原則
  7. 觀察結(jié)果,不符合預期繼續(xù)從0分析

https://www.cnblogs.com/linhaifeng/articles/7274563.html

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末依溯,一起剝皮案震驚了整個濱河市老厌,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌黎炉,老刑警劉巖枝秤,帶你破解...
    沈念sama閱讀 219,110評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異慷嗜,居然都是意外死亡淀弹,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,443評論 3 395
  • 文/潘曉璐 我一進店門庆械,熙熙樓的掌柜王于貴愁眉苦臉地迎上來薇溃,“玉大人,你說我怎么就攤上這事缭乘°逍颍” “怎么了?”我有些...
    開封第一講書人閱讀 165,474評論 0 356
  • 文/不壞的土叔 我叫張陵堕绩,是天一觀的道長薄啥。 經(jīng)常有香客問我,道長逛尚,這世上最難降的妖魔是什么垄惧? 我笑而不...
    開封第一講書人閱讀 58,881評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮绰寞,結(jié)果婚禮上到逊,老公的妹妹穿的比我還像新娘。我一直安慰自己滤钱,他們只是感情好觉壶,可當我...
    茶點故事閱讀 67,902評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著件缸,像睡著了一般铜靶。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上他炊,一...
    開封第一講書人閱讀 51,698評論 1 305
  • 那天争剿,我揣著相機與錄音已艰,去河邊找鬼。 笑死蚕苇,一個胖子當著我的面吹牛哩掺,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播涩笤,決...
    沈念sama閱讀 40,418評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼嚼吞,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了蹬碧?” 一聲冷哼從身側(cè)響起舱禽,我...
    開封第一講書人閱讀 39,332評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎恩沽,沒想到半個月后呢蔫,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,796評論 1 316
  • 正文 獨居荒郊野嶺守林人離奇死亡飒筑,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,968評論 3 337
  • 正文 我和宋清朗相戀三年片吊,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片协屡。...
    茶點故事閱讀 40,110評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡俏脊,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出肤晓,到底是詐尸還是另有隱情爷贫,我是刑警寧澤,帶...
    沈念sama閱讀 35,792評論 5 346
  • 正文 年R本政府宣布补憾,位于F島的核電站漫萄,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏盈匾。R本人自食惡果不足惜腾务,卻給世界環(huán)境...
    茶點故事閱讀 41,455評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望削饵。 院中可真熱鬧岩瘦,春花似錦、人聲如沸窿撬。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,003評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽劈伴。三九已至密末,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背严里。 一陣腳步聲響...
    開封第一講書人閱讀 33,130評論 1 272
  • 我被黑心中介騙來泰國打工新啼, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人田炭。 一個月前我還...
    沈念sama閱讀 48,348評論 3 373
  • 正文 我出身青樓师抄,卻偏偏與公主長得像漓柑,于是被迫代替她去往敵國和親教硫。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,047評論 2 355