MongoDBのドキュメントより:MongoDBのインデックスは、Bツリーのデータ構造を使用しています。複合インデックスにはどのようなデータ構造が使用されていますか?
しかし、それは化合物インデックスにも当てはまりますか?肯定的なケースでは、実際にどのように実装されていますか?
PD:各ノードが単一の値ではなく、たとえば配列内に格納されているインデックスと同じくらいの数のBツリーであると想像する唯一の方法です(つまり、2つのバイナリツリー各索引につき1つ)がマージされていた)。
MongoDBのドキュメントより:MongoDBのインデックスは、Bツリーのデータ構造を使用しています。複合インデックスにはどのようなデータ構造が使用されていますか?
しかし、それは化合物インデックスにも当てはまりますか?肯定的なケースでは、実際にどのように実装されていますか?
PD:各ノードが単一の値ではなく、たとえば配列内に格納されているインデックスと同じくらいの数のBツリーであると想像する唯一の方法です(つまり、2つのバイナリツリー各索引につき1つ)がマージされていた)。
実際の実装では100%の確実性は何も言えませんが、Bツリーとして実装された複合インデックスも考えています。注文)、そして非常に重要なのは、キー値の辞書順を使用することです。
ある程度のスペースを節約するために、ツリーの上部にある最初のキーに関連付けられた値のみを使用するBツリーを検討し、次に2番目のキーの値をさらに進めますダウン、...そして最後のキーの値は葉に近い。これは、ノードの境界を個々のキーと一致させる最適化以外の何ものでもありません。
複合インデックス(と最適化の有無にかかわらず)この方法を実装することの利点は、あなたがいくつかのキーにインデックスを持っている場合、のは、それからBそしてC、その後、あなたは 上のインデックスを取得Aを言わせて、ということですAだけが無料であり、インデックスはAであり、次にBが無料です。実際には、キーのシーケンスの任意のプレフィックスのすべての値は、辞書編集の順序のために、そのようなBツリーで常にグループ化されます。
MongoDB documentsこのように、MongoDBを使用すると、このように複合インデックスを実装すると思います。
さらに、ドキュメントでは、ハッシュされたインデックスフィールドが複合インデックスで禁止されていることを指定しています。 Bツリーが範囲指数を実装するので、これはもう一つの手掛かりです。
また、MongoDBのハッシュインデックスをBツリーではなくハッシュテーブルで実装すると予想されます。ポイントクエリに対してのみBツリーを使用する方が効率的ではないでしょう(対数ルックアップvs. O(1) )