索引底層資料結構和演算法
阿新 • • 發佈:2018-11-20
索引是高效、排序好的資料結構。
為什麼不用hash結構,hash雖然單個快,但是範圍慢;
陣列結構的,查詢慢,需要遍歷。
二叉樹結構的,如果資料是從小到大的插入就會屬於單邊資料,一樣速度慢。
紅黑樹結構,雖然能夠實現自動的平衡樹,但是如果資料量非常大的時候,還是會出現層次特別高。
Btree結構,是提高一個節點的儲存量。可以減少樹的高度,提高查詢速度。
而mysql採用的是B+Tree結構,是BTree的變異,葉子節點稱之為度,而度的大小一般為磁碟一次能讀取的資料的大小。
(而磁碟的 尋道時間慢,磁碟旋轉速度快,一般磁碟I/O次數評價索引結構的優劣)
(預讀:磁碟一般會順序向後讀取一定長度的資料【頁的整數倍】放入記憶體,計算機一般頁的大小為4K)
(B+Tree節點的大小設為一個頁的大小,就可以一次讀取一個頁是一次I/O)
mysql的引擎是屬於表結構的。而資料庫鎖一般為表級別的鎖,頁級別的鎖,行級別的鎖(innodb)
mysql分為MyISAM 引擎(非聚集)
主鍵索引和普通索引,他的索引btree葉子節點上儲存的是資料的指標(資料的存值地址)。
每個索引都是一個BTree結構。
innodb引擎(主鍵索引是(聚集索引))
索引底層使用資料結構:B+tree
主鍵索引的葉子節點儲存的是 索引值和行資料。
普通索引儲存的主鍵索引。
視訊資源:
連結:https://pan.baidu.com/s/19OnjT4uAWZ_FfjRjLVORnw
提取碼:r3gy