我有一個包含大量文檔(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
查詢比其他任何查詢慢得多?
您可以在每個查詢廣告發布結果末尾添加**。explain(「executionStats」)**。這將允許獲得更多的執行細節。 – profesor79
真實與虛假的差異可能由索引選擇性來解釋。例如,如果文檔中有10%的文檔具有soft_deleted:true,則該索引對於匹配soft_deleted:true非常有用。另一方面,當搜索soft_deleted:false時,索引是沒用的。 – joao