MongoDB: Влияет ли $ и оператор на производительность запросов? - PullRequest
0 голосов
/ 21 октября 2019

У меня довольно сложный запрос в проекте. Он потенциально (зависит от параметров пользователя) может иметь множество условий, которые я помещаю под операторы $and и $or.

Вот очень упрощенный пример:

docs.find({name:"shaq", organization: "myorg", url:{$exists:true}})

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

docs.find({$and:[
 {name:"shaq"}, 
 {organization:"myorg"}, 
 {url:{$exists:true}}
]})

Интересно, как это влияет на производительность. Это на самом деле то же самое, или он работает медленнее из-за дополнительного оператора, или он работает быстрее, потому что согласно официальным документам :

$and оператор использует short-circuit оценивание означает, что если первое выражение в списке вернет false mongo не будет оценивать оставшиеся выражения

Итак, вопрос: влияет ли размещение условий под оператором $and на производительность? Если да, то каково влияние?

PS Я пытался исследовать результаты с помощью mongos explain(), но он не ответил на мой вопрос, потому что мои реальные запросы огромны, в результате чего получился огромный отчет, которыйдействительно трудно анализировать.

1 Ответ

0 голосов
/ 22 октября 2019

Попробуйте изучить результаты с меньшим запросом.

Я экспериментировал на одной из своих баз данных, сравнивая две версии и не обнаружил различий в плане выполнения, учитывая довольно простой запрос с 3 вариантами. Это в значительной степени то, что я ожидал, так как они действительно должны быть приравнены к одному и тому же запросу.

Я думаю, вы обнаружите, что индексы, используемые в результате запроса, будут иметь большее влияние на производительность, чем формат запроса.

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