問題を検索したところ、MysqlがB + Treeインデックスを使用していることがわかりましたが、「show index」を実行すると、取得するインデックスタイプはBtreeです。そして、私はこれでMySQLがBtreeとB + treeの両方を使用することを発見しました article 。両方を使用することが本当なら;なぜB + treeに言及せずにBtreeと名付けられているのですか?その場合、それぞれが使用されます。 2つの違いを知っているので、BツリーインデックスとB +ツリーインデックスのパフォーマンスの違いを理解するためにいくつかのクエリを実行したいと思います。これが私の2番目の質問につながります。特定のクエリを実行する際に2つの間に大きな違いがあります。そうであれば、例を挙げてください。前もって感謝します。
InnoDBはBツリーではなくBツリーインデックスを使用します。 InnoDBデータ構造に関するすべての詳細については、 ここ を参照してください。 これらの図 もご覧ください。両方のリソースの作成者であるJeremy Coleは、GoogleのMySQLチームの責任者でした。
構文がB+TREE
ではなくBTREE
になるのはなぜですか?この質問は一部のMySQLまたはMariaDBエンジニアに提起する必要がありますが、少なくとも2つの理由が考えられます。
+
が含まれているため、非常に悪いキーワードです。ISAM
ストレージエンジンと同じくらい古いものです。当時B-TREEが使われていた可能性が高いです。InnoDBがBツリーを使用するとドキュメントに記載されているのはなぜですか?まあ、すべてのMySQLユーザーがB +ツリーとは何かを知っているとは限りません。これは単純化しすぎかもしれませんが、その文脈では受け入れられるようです。
あなたはB-TreeとB + Treeの違いを知っていると書いています。さまざまなパフォーマンス特性を明確にする必要があります。
しかし、一般に、B + Treeは優れていると考えられています。いくら?わかりませんが、桁違いではありません。
B+Tree
は、B-Tree
のようなjustバイナリ検索ツリーです。ここで、
参照用のB-Tree
は、データをノードとリーフに格納します。スキャンにはバックトラッキングが必要なため、そのようなリンクはありません。
B+Tree
の考え方は、ディスクシークの読み取りサイズを最大化することです。インデックスシークだけに関心があり、インデックススキャンに関心がない限り、B+Tree
を実装するデータベースがB-Tree
を使用することはほとんどありません。リンクのオーバーヘッドはそれほど大きくありません。言うまでもなく、B+
ツリーのメソッドでは、同時実行のモデルが発生します。 LehmanおよびYao を参照してください。
これらの違いはすべて、同じアイデアに対する単なる最適化であることが重要です。たとえば、上記のリーマンと八尾の論文は、抽象的にB-Treeを参照しており、その後誤って(imho)、「B-tree
の単純なバリアント(実際にはWedekindによって提案されたB * -treeの1つ)を検討します」と述べています。 WedekindがB + Treeを提案したと思うので、それは奇妙です。
これらの用語は非常に混乱しています。これをチェックしてください "The Ubiquitous B-Tree"published in 1979 あなたが本当に一日の無駄が欲しいなら、
おそらく、Bツリーの文献で最も誤用されている用語は、B *ツリーです。