Overview
インデックスは、MongoDB でクエリを効率的に実行するのに役立ちます。 ただし、作成する各インデックスは書き込みに悪影響を及ぼし、ある程度のディスク容量が必要になります。
不要なインデックスを作成すると、コレクションが肥大化し、書込みが遅くなります。 アプリケーションが実行する各クエリと、そのクエリがインデックスを正当化するかどうかを検討してください。 フィールドがデータベースのクエリに使用されていないため、またはインデックスが冗長であるため、未使用のインデックスを削除します。
不要なインデックスは特定して削除する 必要があります。 Atlas でインデックスを管理するには、 Atlas UIを使用します。
例
プレイヤーに coinsを付与するゲームを考えてみましょう。 プレイヤーが 20 coinsに達すると、そのプレイヤーは 1 starを受け取り、 coinsは 0 にリセットされます。このゲームには、次のようなドキュメントを含むplayersコレクションがあります。
// players collection { "_id": "ObjectId(123)", "first_name": "John", "last_name": "Doe", "coins": 11, "stars": 2 }
playersコレクションにはすべてのフィールドのインデックスがあります。
_idデフォルトでインデックスが作成されます。{ last_name: 1 }{ last_name: 1, first_name: 1 }{ coins: -1 }{ stars: -1 }
last_name Index
この例では、ゲームがデータベースでプレイヤーの情報をクエリすると、プレイヤーのフル名を使用して 1 つのレコードが見つかります。 複合インデックス{ last_name: 1,
first_name: 1 }はこの場合をカバーしているため、ゲームは冗長性があるためインデックス{ last_name: 1 }を削除する必要があります。
coins Index
この例では、 coinsフィールドは データベースの検索に使用されることはありません。 インデックス{ coins: -1 }は未使用であるため、ゲームは削除する必要があります。
stars Index
この例では、ゲームの終了時に、プレイヤー名がスター数の降順でリーダーボードに表示されます。 このゲームは、使用頻度が低い場合でも、インデックス{ stars: -1 }を維持し、 playersコレクション内のすべてのドキュメントをスキャンしないようにする必要があります。
現在、このゲームは次のインデックスを使用しています。
_idデフォルトでインデックスが作成されます。{ last_name: 1, first_name: 1 }{ stars: -1 }
不要なインデックスを削除すると、 playersコレクションの空き領域が増え、書込みが高速化されます。 最も頻繁な読み取りをサポートしているインデックスはコレクション内に引き続き存在するため、パフォーマンスが低下することはありません。
不要なインデックスの特定と削除
Atlas で不要なインデックスを識別するには、 Atlas UI でインデックスを表示 します。
Data Explorer の [ Indexesタブには、各インデックスのSize 、 Usage 、およびその他の情報を表示できます。 インデックスが使用されていないか、別のインデックスによってカバーされている場合は、削除する必要があります。
Atlas でインデックスを削除するには、 Atlas UI を使用してインデックスを削除します。
詳細
インデックスの詳細については、「インデックス」を参照してください。
ユースケースのインデックス作成の詳細については、「インデックス作成戦略 」を参照してください。
MongoDB では、インデックスの最適化など、データベースのパフォーマンス向上に関する無料の MongoDB University コース「モニタリングとインサイト 」も提供しています。