Mysql innodb爲什麼使用B+Tree

Mysql innodb存儲結構(B+Tree)

二叉樹
缺點:數據量容易單邊過長形成鏈表。

紅黑樹(本質爲平衡二叉樹)
缺點:雖然使用旋轉方式改變了單邊過長,但是數據量大時, 樹高度太高不利於查詢。

B-Tree
缺點:雖然每個節點橫向擴容控制了高度爲3,但是每個節點包含索引列值和行數據,導致存儲量小。葉子節點之間沒有指針導致範圍查找必須每次從根節點查找
特點:索引列不重複

B+Tree(變種的B-Tree)
缺點:如果一行數據按照1kb,索引最多最多兩千多萬。(每個節點大下16kb,葉子節點存放了全量數據,非葉子節點冗餘了索引列值,並且存儲了葉子節點的位置(6B).一個bigint佔8B,一個節點大概1170,因爲兩層所以1170*1170*16=21902400

索引和葉子都是從左往右遞增

聚集索引非聚集索引
聚集索引(innodb):

如果沒有主動設置主鍵,就會選一個不包含NULL的第一個唯一索引列作爲主鍵列,並把它用作一個聚集索引。如果沒有這樣的索引就會使用行號生成一個聚集索引,把它當做主鍵,這個行號6bytes,自增。可以用select _rowid from table來查詢。一共兩個文件索引文件和表結構文件


非聚集索引(myisam):索引文件和數據文件分開存儲 (索引文件葉子節點索引列對應着數據文件中數據的地址)一共三個文件 一個索引文件,一個數據文件,一個表結構文件

創建innodb表必須要有主鍵嗎?這是B+Tree特點

索引類型除了BTREE(其實是B+Tree)結構還可以有hash結構,hash不適合範圍查找 
BTREE結構每個葉子節點指向另一個葉子節點,所以對範圍查找比較合適

發佈了15 篇原創文章 · 獲贊 1 · 訪問量 9785
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章