I _id
を経由して単一のクエリのほか、このクエリのインデックスを作成するための戦略は何ですか?
const CommentSchema = new mongoose.Schema({
author: { type: ObjectID, required: true, ref: 'User' },
thread: { type: ObjectID, required: true, ref: 'Thread' },
parent: { type: ObjectID, required: true, ref: 'Comment' },
text: { type: String, required: true },
}, {
timestamps: true,
});
を各スレッドにコメントモデルを持って、私はこの方法を介してデータベースを照会する:
範囲クエリ
const query = {
thread: req.query.threadID,
_id: { $gt: req.query.startFrom }
};
CommentModel.find(query).limit(req.query.limit);
私の意図スレッドに関連するコメントを見つけて、結果の一部を得ることです。このクエリは期待通りに機能するようです。私の質問は次のとおりです:
これは私の要件を満たす正しい方法ですか?
フィールドのインデックスを正しく設定するにはどうすればよいですか?これは複合インデックスですか、または各フィールドのインデックスを分割する必要がありますか?
explain()
の結果を確認しましたが、クエリフィールドの1つにインデックスが含まれている限り、inputStage.stage
はいつもCOLLSCAN
ではなくIXSCAN
でしょうか?これはクエリのパフォーマンスを確認するための重要な情報ですか?1つのフィールドに基づいて検索する必要があるたびに、これらのフィールドのインデックスを作成する必要がありますか?著者が投稿したすべてのコメントを特定のスレッドに検索したいとします。このような
コード:
const query = {
thread: req.query.threadID,
author: req.query.authorID,
};
私はこの要件のために複合インデックスを作成する必要がありますか?
ありがとう!私の質問は、複合インデックスのフィールドのどれが既にインデックスであるObjectIDであるのですか?ありがとう:)おかげで:) –
私はあなたがすでに1つのインデックスを追加し、その後、1つの複合インデックスをクエリを適用すると知っている限り単一インデックスフィールドと複合インデックスフィールドの組み合わせを使用すると、複合インデックスとしては機能しません。複合インデックスとして追加する必要があります。 –