MySQL索引的概念和結(jié)構(gòu)

本文梳理進(jìn)階篇的索引

梳理MySQL索引的一些知識點(diǎn)

  1. 索引概述
  2. 索引結(jié)構(gòu)
  3. 索引分類
  4. 索引語法
  5. SQL性能分析
  6. 索引使用
  7. 索引設(shè)計(jì)原則

本文談目錄1和2

索引概述

概述

MySQL的索引是幫助其高效獲取數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu),在數(shù)據(jù)之外,數(shù)據(jù)庫系統(tǒng)還維護(hù)著滿足特定查找算法的數(shù)據(jù)結(jié)構(gòu)瞒渠,這種數(shù)據(jù)結(jié)以某種方式引用(指向)數(shù)據(jù)站粟,這樣就可以在這些數(shù)據(jù)結(jié)構(gòu)上實(shí)現(xiàn)高級查找算法锯岖,這種數(shù)據(jù)結(jié)構(gòu)就是索引堵未。

索引是數(shù)據(jù)結(jié)構(gòu)!

優(yōu)缺點(diǎn):

優(yōu)勢 劣勢
提高數(shù)據(jù)檢索的效率栖袋,降低數(shù)據(jù)庫的IO成本 索引列要占據(jù)空間
通過索引對列數(shù)據(jù)進(jìn)行排序叹卷,降低數(shù)據(jù)排序成本。降低CPU而消耗 降低了表的更新的速度糊啡,對表進(jìn)行插入拄查,刪除,更新效率降低棚蓄,因?yàn)橐婕暗剿饕男薷?/td>

索引結(jié)構(gòu)

結(jié)構(gòu)

索引結(jié)構(gòu) 描述
B+Tree索引 最常見的索引類型堕扶,大部分引擎都支持
Hash索引 底層數(shù)據(jù)結(jié)構(gòu)用哈希表實(shí)現(xiàn),只有精確匹配索引列的查詢才有效梭依,不支持范圍查找
R-Tree(空間索引) 空間索引是MyISAM引擎特殊類型稍算,主要用于地理空間數(shù)據(jù)類型
Full-text(全文索引) 通過建立倒序索引,快速匹配文檔的方式役拴,類似于lucence糊探、Solr、ES

淺談樹

我們首先了解這個大部分引擎都支持的索引河闰,樹是一種數(shù)據(jù)結(jié)構(gòu)科平,先引入幾個樹的知識點(diǎn),二叉查找樹BST姜性、平衡二叉樹AVL瞪慧、多路平衡查找樹B-Tree(這些樹,有機(jī)會會在數(shù)據(jù)結(jié)構(gòu)和算法中講解部念,發(fā)表此文時弃酌,剛講到鏈表),接下來引入本文的B+Tree(多路平衡查找樹)儡炼。

樹的度數(shù)指的是一個節(jié)點(diǎn)的字節(jié)點(diǎn)個數(shù)
多路一個節(jié)點(diǎn)包含多子個節(jié)點(diǎn)
平衡每個節(jié)點(diǎn)的左右子樹高度差絕對值最多為1

樹數(shù)據(jù)插入的動態(tài)變化

B樹是一種平衡多路搜索樹妓湘,每個節(jié)點(diǎn)可以有兩個以上的節(jié)點(diǎn),B指的是Balances(平衡),統(tǒng)一概念B樹就是B-Tree樹乌询。

B+Tree是B樹的加強(qiáng)版榜贴,更充分利用節(jié)點(diǎn)空間,讓查找速度更加穩(wěn)定妹田。
所有數(shù)據(jù)出現(xiàn)在葉子節(jié)點(diǎn)唬党,葉子節(jié)點(diǎn)形成一個單向鏈表

MySQL的索引數(shù)據(jù)結(jié)構(gòu)對B+Tree樹又做了改進(jìn),增加了一個指向相鄰葉子節(jié)點(diǎn)的鏈表指針秆麸,形成了帶有順序指針的B+Tree

淺談Hash

哈希索引采用一定的hash算法初嘹,將鍵值算成新的hash值,映射到對應(yīng)槽位沮趣,然后存儲hash表屯烦。如果兩個(或多個)鍵值一樣,映射到相同的槽位,產(chǎn)生了哈希沖突驻龟,可以通過鏈表來解決温眉。槽位后面加一個鏈表指向

Hash特點(diǎn)

  1. 只能用于對等比較,不支持范圍
  2. 無法利用索引完成排序操作
  3. 查詢效率高翁狐,只需要一次檢索(無哈希沖突)

思考

innoDb引擎采用B+Tree类溢,
相對于B樹:是因?yàn)閷蛹墱\:數(shù)據(jù)存葉子節(jié)點(diǎn),而B樹葉子和非葉子都會保存數(shù)據(jù)露懒,導(dǎo)致存儲的鍵值減少闯冷,指針減少,保存數(shù)據(jù)懈词,導(dǎo)致樹高
相對于哈希:支持范圍查找和排序

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末蛇耀,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子坎弯,更是在濱河造成了極大的恐慌纺涤,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,406評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件抠忘,死亡現(xiàn)場離奇詭異撩炊,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)崎脉,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評論 3 393
  • 文/潘曉璐 我一進(jìn)店門拧咳,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人荧嵌,你說我怎么就攤上這事呛踊±剩” “怎么了?”我有些...
    開封第一講書人閱讀 163,711評論 0 353
  • 文/不壞的土叔 我叫張陵汪厨,是天一觀的道長赃春。 經(jīng)常有香客問我,道長劫乱,這世上最難降的妖魔是什么织中? 我笑而不...
    開封第一講書人閱讀 58,380評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮衷戈,結(jié)果婚禮上狭吼,老公的妹妹穿的比我還像新娘。我一直安慰自己殖妇,他們只是感情好刁笙,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,432評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般疲吸。 火紅的嫁衣襯著肌膚如雪座每。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,301評論 1 301
  • 那天摘悴,我揣著相機(jī)與錄音峭梳,去河邊找鬼。 笑死蹂喻,一個胖子當(dāng)著我的面吹牛葱椭,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播口四,決...
    沈念sama閱讀 40,145評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼挫以,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了窃祝?” 一聲冷哼從身側(cè)響起掐松,我...
    開封第一講書人閱讀 39,008評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎粪小,沒想到半個月后大磺,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,443評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡探膊,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,649評論 3 334
  • 正文 我和宋清朗相戀三年杠愧,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片逞壁。...
    茶點(diǎn)故事閱讀 39,795評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡流济,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出腌闯,到底是詐尸還是另有隱情绳瘟,我是刑警寧澤,帶...
    沈念sama閱讀 35,501評論 5 345
  • 正文 年R本政府宣布姿骏,位于F島的核電站糖声,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏分瘦。R本人自食惡果不足惜蘸泻,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,119評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望嘲玫。 院中可真熱鬧悦施,春花似錦、人聲如沸去团。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至沐绒,卻和暖如春俩莽,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背乔遮。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評論 1 269
  • 我被黑心中介騙來泰國打工扮超, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留禀崖,地道東北人盾剩。 一個月前我還...
    沈念sama閱讀 47,899評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像姨裸,于是被迫代替她去往敵國和親坯辩。 傳聞我的和親對象是個殘疾皇子馁龟,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,724評論 2 354

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