3

Codeigniter(PHP)とMongoDBを使用してWebアプリを構築しています。インデックスを作成していますが、質問が1つあります。

3つのフィールド(_id、status、type)でクエリを実行していて、インデックスを作成する場合、次のようなインデックスを確保するときに_idを含める必要がありますか?

db.comments.ensureIndex({_id: 1, status : 1, type : 1});

またはこれは期限ですか?

db.comments.ensureIndex({status : 1, type : 1});
4

3 に答える 3

5

複合インデックスに含める場合_idは、呼び出しに明示的に含める必要があります。ensureIndexただし、フィルタリングによって_id単一のドキュメントの選択性がすでに提供されているため、これが正しいことになることはめったにありません。ドキュメントが非常に大きく、カバーされたインデックスを使用しようとしている場合にのみ意味があると思います。

于 2012-07-03T13:56:38.840 に答える
3

MongoDBは現在、クエリを除いて、クエリごとに1つのインデックス$orのみを使用します。一般的なクエリが常にこれらの3つのフィールド(_id、status、type)を検索する場合は、複合インデックスが役立ちます。

DBシェル内から、クエリでexplain()コマンドを使用して、使用されているインデックスに関する情報を取得できます。

于 2012-07-03T13:23:29.813 に答える
-3

_idフィールドに暗黙的にインデックスを作成する必要はありません。自動的に作成されます。mongoのドキュメントを参照してください:

_idインデックス

上限付きコレクションを除くすべてのコレクションについて、_idフィールドのインデックスが自動的に作成されます。このインデックスは特別であり、削除できません。_idインデックスは、そのキーに一意性を適用します(シャーディングを使用する一部の状況を除く)。

于 2012-07-03T13:21:24.503 に答える