インデックスは、通常のデータベースシステムでクエリを高速化するための一般的な方法です。 MongoDBとドキュメントベースのデータベースシステムに違いはありません。この記事では、クエリを最適化するためのMongoDBのインデックスについて説明します。
Mongoのインデックス:
デフォルト
_idはObjectIdオブジェクトであり、コレクション内の一意性を保証する12バイトのBSONタイプです。 ObjectIdは、タイムスタンプ、マシンID、プロセスID、およびプロセスローカル増分カウンターに基づいて生成されます。
単一フィールド
単一フィールドのインデックスと並べ替え操作の場合、MongoDBはインデックスをどちらの方向にもトラバースできるため、インデックスキーの並べ替え順序(つまり、昇順または降順)は重要ではありません。 indexの値は、インデックスのタイプです。たとえば、1は昇順を示し、-1は降順を示します。
db.friends.createIndex( { "name" : 1 } )
複合フィールド
複合インデックスにリストされているフィールドの順序には重要性があります。たとえば、複合インデックスが{userid:1、score:-1}で構成されている場合、インデックスは最初にuseridで並べ替えられ、次に各userid値内でスコアで並べ替えられます。
db.products.createIndex( { "item": 1, "stock": 1 } )
マルチキー
MongoDBは、複数のインデックスを使用して、配列内のコンテンツにインデックスを付けます。 MongoDBは、配列の要素ごとに個別のインデックスエントリを作成します。複数のキーを明示的に作成する必要はありません。
テキストインデックス
コレクションには、最大で1つのテキストインデックスを含めることができます。
テキストインデックスのパフォーマンスコスト:
テキストインデックスは大きくなる可能性があります。これらには、挿入された各ドキュメントの各インデックスフィールドの一意のポストステムワードごとに1つのインデックスエントリが含まれています。
テキストインデックスは挿入スループットに影響を与えます。これは、MongoDBが、新しい各ソースドキュメントのインデックス付きフィールドごとに、ステム処理された一意の単語ごとにインデックスエントリを追加する必要があるためです。
db.reviews.createIndex( { comments: "text" } )
ハッシュインデックス
ハッシュ値でコンテンツをクエリします。ハッシュは、その値によって計算される関数です。ハッシュ値は、個別の値になるように設計されています。 1つの利点は、非常に高速で、最大でO(1)を使用することですが、契約により、通常の二分探索木はO(Log(N))を使用します。ハッシュは、理論的には通常の二分探索木の実装よりも高速です。ただし、不利な点は、範囲検索を実行するハッシュインデックスが通常のインデックスよりも非常に遅くなることです。
これは、ハッシュインデックスを作成するためのPythonの例です
db.active.createIndex( { a: "hashed" } )