索引的各數據結構簡單介紹

索引:幫助MySQL高效獲取數據是排序好數據結構

索引數據結構:二叉樹、紅黑樹、Hash表、B-Tree

MySQL數據結構B+樹

數據庫中不同的表可能有不同的存儲引擎

MylSAM存儲引擎索引文件(MYI文件)和數據文件(MYD文件數據存放地址)是分離的(非聚集)

InnoDB存儲引擎索引實現(聚集)(支持事務)

 

 

 

 

表結構(frm文件)和索引數據(ibd)

1、表數據文件本身就是按b+樹組織的一個索引結構文件

2、聚集索引-葉節點包含了完整的數據結構

3、爲什麼InnoDB表必須有主鍵,並且推薦使用整型的自增主鍵

如果沒有主鍵或者默認使用uuid作爲主鍵會使索引重複,導致b+樹重新分叉的情況,消耗性能

4、爲什麼非主鍵索引結構葉子節點存儲的是主鍵值?(一致性和節省存儲空間)

 

 

一、二叉樹

在排好序的遞增序列如1,2,3...這樣的序列中沒有用

 

二、紅黑樹

自平衡二叉樹,當數據過大如千萬級最壞需要23次磁盤io

 

hash表:索引方法除了b+樹外還有hash表

hash算法MD5、CRC16等

hash對範圍查找無能爲力

三、B樹

  • 節點具有相同的深度,葉節點的指針爲空
  • 所有索引元素不重複
  • 節點中的數據索引從左到右遞增排列

四、B+樹(B樹的變種)

1、B+樹的概念

 

可最多存放1142*1142*16大約2000多萬行數據

一個葉子節點16KB,索引用bigint類型存儲大小8B,指針大小6B,故存儲索引大小約爲14B

16KB/14B=1142

2、B+樹的特點

  • 非葉子節點不存儲data只存儲索引,可以放更多的數據
  • 葉子節點不存儲指針(葉子節點採用鏈表存儲
  • 順序訪問指針,提高區間訪問的性能

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章