Как добавить индекс для $ или запрос - PullRequest
0 голосов
/ 28 сентября 2019

У меня есть запрос монго с оператором $ или, содержащим три условия, и я создал индекс для каждого из трех.Я пытаюсь оптимизировать запрос и ускорить его.Объяснение ("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 })

Я хочу убедиться, что я правильно использую индексы, и исправить их, если это не так.Меня также интересует любая дополнительная оптимизация, которую я могу применить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...