mysql5.7一顆B+樹可以存放多少行數據?為什么使用B+樹(B+Tree)而不是B樹(BTree)?


一顆B+樹的層高最好控制在3層之內,到第4層性能會急劇下降。

計算機存儲數據時,一個扇區512KB,一個文件是4KB,innodb存儲一頁是16KB,innodb的所有文件大小一定是16KB的整數倍,一定是16384 byte的整倍數。

一個葉子節點有多少字節可以存放指向下一節點的指針,取決於主鍵的類型,比如bigint是8字節,而指針又占用6字節,所以指針可以指向1170個非葉子節點: 

16384 / (8+6)= 1170 個非葉子節點

同理,指向葉子節點的個數也可以是1170個,那么3層高的一顆B+樹可以存儲:

第一層指向1170個非葉子節點,第二層再指向1170個葉子節點,1170 * 1170 = 1368900 個葉子節點

那么假設一條記錄1KB大小,那么一頁16KB就可以存儲16行,那么 16行 * 1368900 個葉子節點 = 21902400 行。

【結論】

在每行數據是1KB的情況下,3層高的B+數可以存放2190萬多條數據。

【為什么mysql使用B+樹?而不是B樹?】

因為B樹的非葉子節點也存儲數據,而B+樹只有在葉子節點才存儲數據,所以B樹因為存放了數據,所以能放指針的地方就變少了,那要保存同樣多的數據,就一定要增加樹的高度,如果運氣好,那么可能在中間的葉子節點就能找到,如果運氣不好,那么需要找很多節點才能找到,這個性能是不穩定的。

【HashMap適合做數據庫索引嗎?】

1、數據量很大的時候hash沖突也很大

2、不支持排序

3、不支持range范圍取值

【密集索引和稀疏索引】

如果這個索引樹上不僅有指定的索引列的值,還有其他列的值,那么就是密集索引,比如主鍵索引。

只保存了構成了索引的列,比如組合索引a,b,c,那么該索引樹只包含了a,b,c三個列的值,沒有保存其他更多列的值,就是稀疏索引,那么所有二級索引都是稀疏索引。

【mysql合並sql語句】

insert into t1 values(...),(...),(...); 合並了sql語句

 

 

end.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM