Overview
このガイドでは、 Kotlin Sync ドライバーでインデックスを使用する方法を学習できます。 インデックスはクエリの効率を向上させ、ドキュメントのクエリと保存に機能を追加します。
インデックスがないと、MongoDB はコレクション内のすべてのドキュメントをスキャンして 、各クエリに一致するドキュメントを見つける必要があります。 これらのコレクションスキャンは遅く、アプリケーションのパフォーマンスに悪影響を与える可能性があります。 ただし、クエリに適切なインデックスがある場合、MongoDB はそのインデックスを使用して検査する必要があるドキュメントを制限できます。
クエリがインデックスから直接結果を返すために満たす必要がある基準の詳細については、 MongoDB Serverマニュアルの 対象クエリ セクションを参照してください。
操作上の考慮事項
クエリのパフォーマンスを向上させるには、ソートされた結果を返すアプリケーションのクエリや操作で頻繁に表示されるフィールドにインデックスを構築します。追加する各インデックスは、アクティブになるとディスク容量とメモリを消費するため、キャパシティプランニングのためにインデックスメモリとディスク使用量を追跡する必要がある場合があります。さらに、書込み操作によってインデックス付きフィールドが更新されると、MongoDB は関連するインデックスも更新します。
MongoDB は動的スキーマをサポートしているため、アプリケーションは名前が事前に確認できないフィールドや任意のフィールドに対してクエリを実行できます。ワイルドカード インデックスはこれらのクエリをサポートするのに役立ちますが、ワークロードベースのインデックスプランニングを置き換えるように設計されていません。
データモデルの設計とアプリケーションに適したインデックスの選択の詳細については、サーバーのドキュメントの「インデックス作成戦略」と「データ モデリングとインデックス 」を参照してください。
インデックス タイプ
MongoDB には、データのクエリをサポートするためにさまざまなインデックスタイプがあります。コレクションで createIndex()
メソッドを呼び出し、インデックス定義を引数として渡すことでインデックスを作成できます。
以下のセクションでは、最も一般的なインデックス型について説明し、各インデックス型を作成するためのサンプルコードを示します。
注意
このページの例では、Atlasサンプルデータセット の sample_mflix.movies
コレクションと sample_mflix.theaters
コレクションを使用します。MongoDB Atlasクラスターを無料で作成して、サンプルデータセットをロードする方法については、Kotlin Syncドライバーを使い始める を参照してください。
さまざまなインデックスタイプの詳細については、 MongoDB Serverマニュアルのインデックス タイプを参照してください。
単一フィールド インデックス
次の例では、指定されたフィールドに昇順のインデックスを作成しています。
collection.createIndex(Indexes.ascending("<field name>"))
単一フィールドインデックスの詳細については、 MongoDB Serverマニュアルの「単一フィールド インデックス」を参照してください。
複合インデックス
次の例では、指定されたフィールドに複合インデックスを作成しています。
collection.createIndex(Indexes.ascending("<field name 1>", "<field name 2>"))
複合インデックスの詳細については、 マニュアルの「 複合インデックスMongoDB Server 」を参照してください。
Multikey Index
次の例では、指定された配列値フィールドにマルチキー インデックスを作成します。
collection.createIndex(Indexes.ascending("<array field name>"))
マルチキー インデックスの詳細については、 MongoDB Serverマニュアルの「 マルチキー インデックス 」を参照してください。
クラスター化されたインデックス
次の例では、 _id
フィールドにクラスター化インデックスを持つ新しいコレクションを作成します。
val clusteredIndexOptions = ClusteredIndexOptions( Indexes.ascending("_id"), true ) val collection = database.createCollection("<collection name>", clusteredIndexOptions)
クラスター化されたコレクションとインデックスの詳細については、 MongoDB Serverマニュアルのクラスター化されたコレクションを参照してください。
Text Index
次の例では、指定された string フィールドにテキスト インデックスを作成します。
collection.createIndex(Indexes.text("<field name>"))
地理空間インデックス
次の例では、GeoJSON オブジェクトを含む指定されたフィールドに2dsphere
インデックスを作成します。
collection.createIndex(Indexes.geo2dsphere("<GeoJSON object field>"))
地理空間インデックスの詳細については、 MongoDB Serverマニュアルの地理空間インデックスを参照してください。
ユニークインデックス
次の例では、指定されたフィールドに一意のインデックスを作成しています。
val indexOptions = IndexOptions().unique(true) collection.createIndex(Indexes.ascending("<field name>"), indexOptions)
一意なインデックスの詳細については、 MongoDB Serverマニュアルの一意なインデックスを参照してください。
ワイルドカード インデックス
次の例では、 指定されたコレクションにワイルドカード インデックスを作成します。
collection.createIndex(Indexes.ascending("$**"))
ワイルドカード インデックスの詳細については、 MongoDB Serverマニュアルの「 ワイルドカード インデックス 」を参照してください。
インデックスの削除
次の例に示すように、コレクションで dropIndex()
メソッドを使用してインデックスを削除できます。
collection.dropIndex("<index name>")