インデックスの考慮事項と管理
Overview
このガイドでは、インデックスを使用してクエリの効率を向上させ、ドキュメントのクエリと保存に機能を追加する方法について説明します。
関連するインデックスがない場合、 MongoDBはコレクション内のすべてのドキュメントをスキャンして、クエリに一致するドキュメントを見つけます。 これらのコレクションスキャンは遅く、アプリケーションのパフォーマンスに悪影響を与える可能性があります。 ただし、適切なインデックスが存在する場合、 MongoDBはそのインデックスを使用して検査するドキュメントの数を減らすことができます。
操作上の考慮事項
クエリのパフォーマンスを向上させるには、ソートされた結果を返すアプリケーションのクエリや操作で頻繁に表示されるフィールドにインデックスをビルドします。 追加する各インデックスはディスク領域とメモリを消費するため、キャパシティープランニングを行うときにメモリとディスクの使用量を追跡することをお勧めします。 さらに、書込み操作によってインデックスフィールドが更新されると、 MongoDBは関連するインデックスを更新するため、書込み操作のパフォーマンスに悪影響を影響可能性があります。
MongoDBアプリケーションでワイルドカード インデックスを使用して、名前が事前に確認されていない、または任意のフィールドに対してクエリを実行できます。 ワイルドカード インデックスは、ワークロードベースのインデックスプランニングを置き換えるように設計されていません。
データモデルの設計とインデックスの選択の詳細については、 MongoDB Serverマニュアルの「 運用上の要因とデータモデル 」ガイドの「インデックス」セクションを参照してください。
サンプル データ
このガイドの例では、 Atlas サンプル データセットのsample_mflix
データベース内の movies
コレクションを使用します。 MongoDB Atlas クラスターを無料で作成して、サンプル データセットをロードする方法については、 「 Atlas を使い始める 」ガイドを参照してください。
インデックスの作成
MongoDBは、データのクエリに役立ついくつかのインデックスタイプをサポートしています。 以下のページでは、さまざまなインデックスタイプについて説明し、各タイプのインデックスをプログラムで作成するためのサンプルコードを紹介します。
インデックスをリストする
コレクションのインデックスのリストを取得するには、 MongoDB\Collection::listIndexes()
メソッドを呼び出します。
foreach ($collection->listIndexes() as $indexInfo) { echo $indexInfo; }
インデックスを削除する
_id
フィールドのデフォルトの一意なインデックスを除く未使用のインデックスを削除できます。
次のセクションでは、コレクションから 1 つ以上のインデックスを削除する方法を示す例を示します。
単一インデックスの削除
インデックスの名前をMongoDB\Collection::dropIndex()
メソッドに渡して、コレクションからインデックスを削除します 。
次の例ではmovies
コレクションから'_title_'
インデックスを排除します。
$collection->dropIndex('_title_');
注意
複合インデックスから単一のフィールドを削除することはできません。 インデックス フィールドを更新するには、インデックス全体を削除し、新しいインデックスを作成する必要があります。
すべてのインデックスを削除
コレクションでMongoDB\Collection::dropIndexes()
メソッドを呼び出すと、すべてのインデックスを削除できます。
$collection->dropIndexes();
dropIndexes()
メソッドは、削除されたインデックスの数に関する情報と成功メッセージを返します。
API ドキュメント
このガイドで説明したメソッドや型の詳細については、次の API ドキュメントを参照してください。