где столбец в (одно значение) производительности - PullRequest
0 голосов
/ 09 июля 2020

Я пишу код Dynami c sql, и было бы проще использовать предложение generi c where column in (<comma-seperated values>), даже если в предложении может быть 1 член (в нем никогда не будет 0).

Итак, имеет ли этот запрос:

select * from table where column in (value1)

производительность, отличную от

select * from table where column=value1

?

Результаты всех моих тестов в тех же планах выполнения, но если есть какие-то знания / документация, которые ставят это в камень, это было бы полезно.

Ответы [ 2 ]

1 голос
/ 09 июля 2020

Это может не выполняться для каждой СУБД, а также для каждого запроса с его конкретными c обстоятельствами.

Механизм переводит WHERE id IN(1,2,3) в WHERE id=1 OR id=2 OR id=3.

Таким образом, ваши два способа сформулировать предикат (вероятно) приведут к точно такой же интерпретации.

Как всегда: нам не следует особо беспокоиться о том, как движок «думает». Разработчики сделали это очень хорошо :-) Мы сообщаем - через утверждение - что мы хотим получить, а не как мы хотим это получить.

Некоторые подробности вот , особенно первая часть.

0 голосов
/ 09 июля 2020

Думаю, это будет зависеть от платформы, которую вы используете (оптимизатор данного движка SQL).

Я провел небольшой тест, используя MySQL Сервер и:

Когда я запрашиваю select * from table where id = 1;, я получаю 1 итог, запрос занял 0,0043 секунд

Когда я query select * from table where id IN (1); я получил 1 всего, Query занял 0.0039 секунд

Я знаю, что это зависит от сервера и P C и от чего ... Но результаты очень близки.

Но вы должны помнить, что IN не является sargable (без аргументов поиска), он не будет использовать индекс для разрешения запроса, = sargable и поддерживает индекс ..

Если вы хотите использовать лучший из них, вам следует протестировать их в своей среде, потому что они оба работают так хорошо !!

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