私は多数のドキュメント(32 809 900)を持つコレクションを持っています。すべての文書にsoft_deleted
というフィールドがあります。私もsoft_deleted: 1
フィールドを作成しました。次に、フィールドに関連するいくつかの異なるクエリをテストしました。ここに私の結果があります:インデックス付きフィールドのMongoDBクエリが非常に遅い
Query Number of results Time in milliseconds
db.cgm_egvs
.find().count() 32809900 90
db.cgm_egvs
.find({soft_deleted: true}) 2820897 688
.count()
db.cgm_egvs
.find({soft_deleted: false}) 29989003 3983
.count()
db.cgm_egvs
.find({soft_deleted: null}) 0 42
.count()
db.cgm_egvs
.find({soft_deleted: {$ne: true}}) 29989003 82397
.count()
なぜこれらのクエリ間でクエリ時間が異なるのですか?私はsoft_deleted
がtrue
またはfalse
である文書を同じ時間がかかると予想します。 さらに重要なことは、!= true
でのクエリが他のクエリよりもずっと遅いのはなぜですか?
あなたは**追加することができます。各クエリの広告ポスト結果の最後に**(「executionStats」)を説明します。これにより、より詳細な実行の詳細が得られます。 – profesor79
真と偽の違いは、インデックスの選択性によって説明できます。例えば、あなたのドキュメントの10%がsoft_deleted:trueの場合、インデックスはsoft_deleted:trueにマッチするのに便利です。一方、soft_deleted:falseを検索する場合、インデックスはまったく役に立たない。 – joao