關(guān)于索引(2)

  • 1.什么是聚簇索引?

不是一種單獨(dú)的索引方式,而是一種數(shù)據(jù)存儲方式,innoDB的聚簇索引實(shí)際上在同一個(gè)結(jié)構(gòu)中保存了B-tree索引和數(shù)據(jù)行;

當(dāng)表有聚簇索引時(shí),它的數(shù)據(jù)行實(shí)際上存放在索引的葉子頁上,葉子頁包含了行的全部數(shù)據(jù),而節(jié)點(diǎn)頁只包含索引列;"聚簇"表示數(shù)據(jù)行和相鄰的鍵值緊湊地存儲在一起,因?yàn)闊o法同時(shí)把數(shù)據(jù)行存放在兩個(gè)不同的地方,所以一個(gè)表只能有一個(gè)聚簇索引,類似于oracle的索引組織表;
下圖便展示了mysql的Innodb主鍵索引的原理圖:


主鍵索引的原理圖.png

在InnoDB中虎眨,表數(shù)據(jù)文件本身就是按B+Tree組織的一個(gè)索引結(jié)構(gòu)作煌,這棵樹的葉子頁節(jié)點(diǎn)data域保存了完整的數(shù)據(jù)記錄香椎,這個(gè)索引的key是數(shù)據(jù)表的主鍵留瞳,因此InnoDB表數(shù)據(jù)文件本身就是主索引,所以必須有主鍵惹盼,也就是說innoDB通過主鍵聚集數(shù)據(jù)唤反,如果沒有顯示定義,innoDB會選擇一個(gè)唯一的非空索引代替.如果沒有這樣的索引,innoDB會隱式定義一個(gè)主鍵來作為聚簇索引.

  • 2.聚簇索引的優(yōu)點(diǎn)和缺點(diǎn)
    優(yōu)點(diǎn):
    1 .可以把相關(guān)的數(shù)據(jù)保存在一起;比如根據(jù)用戶ID來聚集郵件數(shù)據(jù);
    2.數(shù)據(jù)訪問更快,聚簇索引將索引和數(shù)據(jù)保存在同一個(gè)B-tree中,因此聚簇索引中獲取數(shù)據(jù)通常比在非聚簇索引中查找要快柴信。
    3.使用覆蓋索引(索引列和查詢列一致)掃描的查詢可以直接使用聚簇索引頁節(jié)點(diǎn)中的主鍵值;
    缺點(diǎn):
    1.聚簇?cái)?shù)據(jù)最大限度地提高了I/O密集型應(yīng)用的性能,但如果數(shù)據(jù)全部都放在內(nèi)存中,則訪問的順序就沒那么重要了;
    2.插入速度嚴(yán)格依賴于插入順尋,按照主鍵的順序插入是加載到innodb;如果不是按照主鍵順序加載數(shù)據(jù),那么加載完成后最好使用OPTIMIZE TABLE TABLENAME命令重新組織一下表套啤。
    3.更新聚簇索引列的代價(jià)很高,因?yàn)闀?qiáng)制innodb將每個(gè)被更新的行移動到新的位置。
    4.基于聚簇索引的表在插入新行,或者主鍵被更新導(dǎo)致需要移動行的時(shí)候,可能面臨“頁分裂”的問題.當(dāng)行的主鍵值要求必須將這一行插入到某個(gè)已滿的頁中時(shí),存儲引擎會將該頁分裂成兩個(gè)頁面來容納該行,這就是一次頁分裂操作,頁分裂會導(dǎo)致表占用更多的磁盤空間;
    5.聚簇索引可能導(dǎo)致全表掃描變慢,尤其是行比較疏松,或者由于頁分裂導(dǎo)致數(shù)據(jù)存儲不連續(xù)的時(shí)候;
    6.二級索引(非聚簇索引) 可能比想象的要更大,因?yàn)樵诙壦饕娜~子節(jié)點(diǎn)包含了引用行的主鍵列;二級索引訪問需要兩次索引查找,而不是一次;

不應(yīng)該適用二級索引,應(yīng)該使用hash索引;

  • 3.MyISAM支持的索引
    MyISAM是按照數(shù)據(jù)插入的順序存儲在磁盤上的随常,葉子節(jié)點(diǎn)存儲數(shù)據(jù)行的指針引用潜沦,隱藏了行的物理細(xì)節(jié) ,只顯示索引中的節(jié)點(diǎn)绪氛,索引中的每個(gè)葉子節(jié)點(diǎn)包含了具體行的指針引用唆鸡。其原理如圖所示:


    MyISAM支持的索引.png

    由此可得出:MyISAM索引文件和數(shù)據(jù)文件是分離的,索引文件僅保存數(shù)據(jù)記錄的地址枣察;

  • 4.InnoDB和MyISAM的二級索引
    innoDB二級索引的葉子節(jié)點(diǎn)中存儲的不是“行指針”争占,而是主鍵值燃逻,并以此作為指向行的指針,如圖所示:

    InnoDB主鍵索引與二級索引示意圖.png

    這樣做有什么好處嘞?
    這樣就減少了出現(xiàn)當(dāng)行移動或者數(shù)據(jù)頁分裂時(shí)二級索引的維護(hù)工作臂痕,使用主鍵值當(dāng)作指針會讓二級索引占用更多的空間伯襟,但是,在移動行時(shí)無需更新二級索引中的這個(gè)主鍵值呀握童。
    解釋下頁分裂:頁是InnoDB存儲引擎管理數(shù)據(jù)庫的最小磁盤單位姆怪,類型為B-Tree 節(jié)點(diǎn)的頁,存放的即是表中行的實(shí)際數(shù)據(jù)了,InnoDB中的頁大小為16KB澡绩,負(fù)載因子是15稽揭,且不可以更改,當(dāng)超過這個(gè)數(shù)據(jù)就會進(jìn)行頁分裂,且分裂時(shí)InnoDB一般會記錄下一個(gè)頁的數(shù)據(jù)信息英古。
    頁分裂帶來的問題:頁會變得稀疏且被不規(guī)則的填充,導(dǎo)致最終數(shù)據(jù)碎片化淀衣。
    解決:OPTIMIZE TABLE 來重建表并優(yōu)化頁的填充。

  • 5.MyISAM的二級索引
    MyISAM中召调,主索引和輔助索引(Secondary key)在結(jié)構(gòu)上沒有任何區(qū)別膨桥,只是主索引要求key是唯一的,而輔助索引的key是可以重復(fù)的唠叛,如圖所示:


    MyISAM二級索引.png

    這樣相對于使用B+的InnoDB可通過輔助索引快速找到所有的數(shù)據(jù)只嚣,而不需要再遍歷一邊主鍵索引,所以適用于OLAP艺沼。

以上便是對索引的相關(guān)補(bǔ)充册舞,后續(xù)將會對索引優(yōu)化繼續(xù)展開書寫...

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市障般,隨后出現(xiàn)的幾起案子调鲸,更是在濱河造成了極大的恐慌,老刑警劉巖挽荡,帶你破解...
    沈念sama閱讀 222,590評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件藐石,死亡現(xiàn)場離奇詭異,居然都是意外死亡定拟,警方通過查閱死者的電腦和手機(jī)于微,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,157評論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來青自,“玉大人株依,你說我怎么就攤上這事⊙哟埽” “怎么了恋腕?”我有些...
    開封第一講書人閱讀 169,301評論 0 362
  • 文/不壞的土叔 我叫張陵,是天一觀的道長逆瑞。 經(jīng)常有香客問我吗坚,道長祈远,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,078評論 1 300
  • 正文 為了忘掉前任商源,我火速辦了婚禮车份,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘牡彻。我一直安慰自己扫沼,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,082評論 6 398
  • 文/花漫 我一把揭開白布庄吼。 她就那樣靜靜地躺著缎除,像睡著了一般。 火紅的嫁衣襯著肌膚如雪总寻。 梳的紋絲不亂的頭發(fā)上器罐,一...
    開封第一講書人閱讀 52,682評論 1 312
  • 那天,我揣著相機(jī)與錄音渐行,去河邊找鬼轰坊。 笑死,一個(gè)胖子當(dāng)著我的面吹牛祟印,可吹牛的內(nèi)容都是我干的肴沫。 我是一名探鬼主播,決...
    沈念sama閱讀 41,155評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼蕴忆,長吁一口氣:“原來是場噩夢啊……” “哼颤芬!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起套鹅,我...
    開封第一講書人閱讀 40,098評論 0 277
  • 序言:老撾萬榮一對情侶失蹤站蝠,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后卓鹿,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體菱魔,經(jīng)...
    沈念sama閱讀 46,638評論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,701評論 3 342
  • 正文 我和宋清朗相戀三年减牺,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了豌习。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片存谎。...
    茶點(diǎn)故事閱讀 40,852評論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡拔疚,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出既荚,到底是詐尸還是另有隱情稚失,我是刑警寧澤,帶...
    沈念sama閱讀 36,520評論 5 351
  • 正文 年R本政府宣布恰聘,位于F島的核電站句各,受9級特大地震影響吸占,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜凿宾,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,181評論 3 335
  • 文/蒙蒙 一矾屯、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧初厚,春花似錦件蚕、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,674評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至亚情,卻和暖如春妄痪,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背楞件。 一陣腳步聲響...
    開封第一講書人閱讀 33,788評論 1 274
  • 我被黑心中介騙來泰國打工衫生, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人履因。 一個(gè)月前我還...
    沈念sama閱讀 49,279評論 3 379
  • 正文 我出身青樓障簿,卻偏偏與公主長得像,于是被迫代替她去往敵國和親栅迄。 傳聞我的和親對象是個(gè)殘疾皇子站故,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,851評論 2 361

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