更新時間:2022-12-09 16:24:22 來源:動力節點 瀏覽1465次
1.MySQL有哪幾種索引類型?
1、從存儲結構上來劃分:BTree索引(B-Tree或B+Tree索引),Hash索引,full-index全文索引,R-Tree索引。這里所描述的是索引存儲時保存的形式,
2、從應用層次來分:普通索引,唯一索引,復合索引。
普通索引:即一個索引只包含單個列,一個表可以有多個單列索引
唯一索引:索引列的值必須唯一,但允許有空值
復合索引:多列值組成一個索引,專門用于組合搜索,其效率大于索引合并
聚簇索引(聚集索引):并不是一種單獨的索引類型,而是一種數據存儲方式。具體細節取決于不同的實現,InnoDB的聚簇索引其實就是在同一個結構中保存了B-Tree索引(技術上來說是B+Tree)和數據行。
非聚簇索引: 不是聚簇索引,就是非聚簇索引
3、根據中數據的物理順序與鍵值的邏輯(索引)順序關系: 聚集索引,非聚集索引。
2. 說一說索引的底層實現?
Hash索引
基于哈希表實現,只有精確匹配索引所有列的查詢才有效,對于每一行數據,存儲引擎都會對所有的索引列計算一個哈希碼(hash code),并且Hash索引將所有的哈希碼存儲在索引中,同時在索引表中保存指向每個數據行的指針。
B-Tree索引(MySQL使用B+Tree)
B-Tree能加快數據的訪問速度,因為存儲引擎不再需要進行全表掃描來獲取數據,數據分布在各個節點之中。
B+Tree索引
是B-Tree的改進版本,同時也是數據庫索引索引所采用的存儲結構。數據都在葉子節點上,并且增加了順序訪問指針,每個葉子節點都指向相鄰的葉子節點的地址。相比B-Tree來說,進行范圍查找時只需要查找兩個節點,進行遍歷即可。而B-Tree需要獲取所有節點,相比之下B+Tree效率更高。
B+tree性質:
n棵子tree的節點包含n個關鍵字,不用來保存數據而是保存數據的索引。
所有的葉子結點中包含了全部關鍵字的信息,及指向含這些關鍵字記錄的指針,且葉子結點本身依關鍵字的大小自小而大順序鏈接。
所有的非終端結點可以看成是索引部分,結點中僅含其子樹中的最大(或最小)關鍵字。
B+ 樹中,數據對象的插入和刪除僅在葉節點上進行。
B+樹有2個頭指針,一個是樹的根節點,一個是最小關鍵碼的葉節點。
3. 為什么索引結構默認使用B+Tree,而不是B-Tree,Hash,二叉樹,紅黑樹?
B-tree: 從兩個方面來回答
Hash:
Hash索引在查詢等值時非常快 ;
因為Hash索引始終索引的所有列的全部內容,所以不支持部分索引列的匹配查找 ;
如果有大量重復鍵值得情況下,哈希索引的效率會很低,因為存在哈希碰撞問題 。
二叉樹: 樹的高度不均勻,不能自平衡,查找效率跟數據有關(樹的高度),并且IO代價高。
紅黑樹: 樹的高度隨著數據量增加而增加,IO代價高。
以上就是“Mysql索引優化面試題,大廠招聘在用”,你能回答上來嗎?如果想要了解更多的Java面試題相關內容,可以關注動力節點Java官網。
0基礎 0學費 15天面授
有基礎 直達就業
業余時間 高薪轉行
工作1~3年,加薪神器
工作3~5年,晉升架構
提交申請后,顧問老師會電話與您溝通安排學習