У меня есть коллекция с большим количеством документов (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
настолько медленнее, чем любой другой запрос?
Вы могли бы добавить **. Объяснить («executeStats») ** в конце каждого результата объявления объявления. Это позволит получить больше деталей выполнения. – profesor79
Истинное противоречие с ложью может быть объяснено селективностью индекса. Например, если 10% ваших документов имеют soft_deleted: true, индекс полезен для соответствия soft_deleted: true. С другой стороны, при поиске soft_deleted: false, индекс бесполезен. – joao