Docs Menu
Docs Home
/
MongoDB Atlas
/ /

不要なインデックスの削除

項目一覧

  • 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 }

この例では、ゲームがデータベースでプレイヤーの情報をクエリすると、プレイヤーのフル名を使用して 1 つのレコードが見つかります。 複合インデックス{ last_name: 1, first_name: 1 }はこの場合をカバーしているため、ゲームは冗長性があるためインデックス{ last_name: 1 }を削除する必要があります。

この例では、 coinsフィールドは データベースの検索に使用されることはありません。 インデックス{ coins: -1 }は未使用であるため、ゲームは削除する必要があります。

この例では、ゲームの終了時に、プレイヤー名がスター数の降順でリーダーボードに表示されます。 このゲームは、使用頻度が低い場合でも、インデックス{ stars: -1 }を維持し、 playersコレクション内のすべてのドキュメントをスキャンしないようにする必要があります。

現在、このゲームは次のインデックスを使用しています。

  • _id デフォルトでインデックスが作成されます。

  • { last_name: 1, first_name: 1 }

  • { stars: -1 }

不要なインデックスを削除すると、 playersコレクションの空き領域が増え、書込みが高速化されます。 最も頻繁な読み取りをサポートしているインデックスはコレクション内に引き続き存在するため、パフォーマンスが低下することはありません。

Atlas で不要なインデックスを識別するには、 Atlas UI でインデックスを表示 します。

Data Explorer の [ Indexesタブには、各インデックスのSizeUsage 、およびその他の情報を表示できます。 インデックスが使用されていないか、別のインデックスによってカバーされている場合は、削除する必要があります。

Atlas でインデックスを削除するには、 Atlas UI を使用してインデックスを削除します。

戻る

無制限の配列を避ける