MySQL が基礎となるデータ構造として B+ ツリーを選択するのはなぜですか?

インデックスの下部で使用されるデータ構造と、他のデータ構造の代わりに B+ ツリーが使用される理由:

(1) 二分木を使用する場合 インクリメンタルフィールドをインデックスとして使用すると、二分木がリンクリストに縮退してしまい、検索効率が非常に低くなります。

(2) 赤黒ツリーを使用する場合、新しい要素の挿入中に自己バランスを取り、位置を調整しますが、結局のところ、赤フォーク ツリーは依然として 2 分ツリーです。ツリーの高さは依然として高すぎます。高い場合、I/O 操作が多すぎるため、マルチパス ツリー B ツリーおよび B+ ツリーの層の高さが低くなります。

(3) ハッシュ テーブルを使用する場合: ハッシュ テーブルは単一のクエリでは確かに高速ですが、次のような範囲クエリは次のとおりです。

(4)

1. B ツリーの非リーフ ノードとリーフ ノードの間に重複はなく、B+ ツリーの非リーフ ノードとリーフ ノードの間に重複があります。つまり、B+ ツリーには冗長ノードがあります。

2. B ツリーの非リーフ ノードとリーフ ノードはどちらもインデックス キーとデータの両方を格納します。B+ ツリーの非リーフ ノードはインデックスのみを格納し、データは格納しません。リーフ ノードはインデックスとデータの両方を格納します。データ。

3. B ツリーのリーフ ノードはディスク上の隣接ノードの位置を保存しませんが、B+ ツリーのリーフ ノードはディスク上の隣接ノードの位置を保存するため、B+ ツリーは範囲クエリをサポートします。

4. B-tree では葉ノードを調べなくてもデータを見つけることができますが、B+ ツリーでは葉ノードまでデータを見つける必要があります。

おすすめ

転載: blog.csdn.net/weixin_47414034/article/details/132667894