標籤:定義 二級索引 記憶體 管理 節點 分享 刪除 方式 發展
B樹和B+樹的區別
1,B樹的葉子節點和內節點存在的都是資料行的所有資訊,B+樹的內節點值存放鍵(索引)資訊,資料都在葉子節點上。
2,由於B樹鍵和值的所有資訊,所以每頁的儲存的資料行相對較少,隨資料發展,該樹發成為一個高瘦的樹;相反,B+樹的內節點只存放索引值,所以會成為一個矮胖的樹。所以就搜尋而言,B+樹的效率比B樹的效率要高。
3,B樹的查詢效率和所查的鍵在B樹種的位置有關;而B+樹的複雜度對於某個B+樹來說是固定的。
4,B樹整體而言相對B+樹可以節省儲存空間,但是插入刪除的複雜度明顯增加,而且效能不平衡(有時很快能找到合適位置,有時需要消耗大量的IO)。而B+樹是一種很好的折中方案。查詢過程穩定,插入刪除操作一般最多也是進行一次分裂(合適的位置的節點儲存慢了,需要分裂)。
5,B樹種所有的資料只儲存一次。B+樹種除了葉子節點儲存所有資料以外,還需要內節點儲存鍵的資料。所以在佔用空間方面,B+樹的方式比B樹佔用空間要多一些,但是B+樹的方式提升了整體效能。
索引的設計
影響電腦任務的三個因素:記憶體、處理器和磁碟的速度。
磁碟的效能與讀寫順序有關,順序讀寫比隨機讀寫要快得多。
索引設計儲存方式:
1,將磁碟空間或檔案劃分未許多大小相同的塊或頁,每個塊可以儲存多個行。
2,在一個塊內,資料通過鏈表或者數組的方式來進行組織管理。
3,在一個塊內,所有的資料也是按照索引值排序的,可以通過經典的二分尋找快速定位到相應的資料行。
4,通過塊來承載資料,通過B+樹來組織不同的塊之間的關係。
5,通過內節點的索引值和一個位置資訊、內節點和下層節點或者葉子節點的指標,可以很方便的找到該內節點的子節點。
叢集索引和二級索引
儲存所有資料的索引成為叢集索引,叢集索引的順序是按照主鍵(可以是Rowid或者自增ID或者使用者佈建的其他主鍵)排序。
回表,二級索引上的資料列不能全部覆蓋鎖需要的查詢,這就需要通過二級索引的指標尋找到叢集索引。
叢集索引的結構:
索引結構:[主鍵列][TRXID][ROLLPTR][其他建表時建立的非主鍵列]
參與記錄比較的列:主鍵列
內節點Key列:[主鍵列]+pageno指標
注意:上面所說的主鍵,若使用者有定義主鍵就是指使用者定義的主鍵;否則是系統給的不可見的主鍵(Rowid)
二級索引的結構
索引結構:[索引列][主鍵列]
參與記錄和比較的列:[索引列][主鍵列]
內節點的key列:[索引列][主鍵列]+pageno
神奇的B+樹網路
讀書筆記-MySQL營運內參08-索引實現原理1