У меня есть запрос монго с оператором $ или, содержащим три условия, и я создал индекс для каждого из трех.Я пытаюсь оптимизировать запрос и ускорить его.Объяснение ("executeStats") действительно показывает, что оно выбирает один из трех индексов, но не всегда тот, который производит совпадение или совпадения.
Если я удаляю условие $ или и выполняю поиск независимо по одному из условий, результат происходит менее чем за 5 миллисекунд.Но с $ или условием оно составляет от 4000 до 6000 миллис.
Насколько я понимаю, каждое условие в выражении $ или должно иметь свой собственный независимый индекс вместо одного индекса, который включает все три условия.
Три условия относятся к значениям, которые являются частью словаря (карты), хотя я предполагаю, что это не должно иметь значения.
Я использую Mongo 3.4 на платформе Linux.
Запрос:
db.collection.find({ "segment" : "east", "$or" : [ { "map.name" : "someone"} , { "map.email" : "some_email@comp.com"} , { "map.title" : "director" }]})
Индексы:
db.leads.createIndex({ segment : 1, 'map.name': 1 })
db.leads.createIndex({ segment : 1, 'map.email': 1 })
db.leads.createIndex({ segment : 1, 'map.title': 1 })
Я хочу убедиться, что я правильно использую индексы, и исправить их, если это не так.Меня также интересует любая дополнительная оптимизация, которую я могу применить.