SQL где поле в vs. где field = с несколькими ors?
Какое из них лучше использовать в отношении производительности?... в отношении удобочитаемости/понятности?... в отношении принятых стандартов?
SELECT *
FROM Wherever
WHERE Greeting IN ('hello', 'hi', 'hey')
ИЛИ
SELECT *
FROM Wherever
WHERE Greeting = 'hello'
OR Greeting = 'hi'
OR Greeting = 'hey'
Первое кажется мне более интуитивным/понятным, но я не уверен в принятых стандартах и производительности.
Ответы
Ответ 1
Это более читаемо и более универсально принято:
SELECT *
FROM Wherever
WHERE Greeting in ('hello', 'hi', 'hey')
Все современные SQL-серверы оптимизируют ваши запросы, поэтому оба они могут быть изменены в один и тот же код, который выполняется на сервере, поэтому различия в производительности будут незначительными или несуществующими.
Edit:
По-видимому, опция in
выполняется быстрее, так как она оценивает двоичный поиск, тогда как multiple =
просто уравновешивает каждое утверждение отдельно.
Ответ 2
Все основные двигатели (MySQL
, PostgreSQL
, Oracle
и SQL Server
) оптимизируют его до тех же планов.
Ответ 3
Производительность = идентичная.
Чтение = "IN"
Ответ 4
Я бы сказал, что первый вариант включает in
:
SELECT *
FROM Wherever
WHERE Greeting IN ('hello', 'hi', 'hey')
Это:
- гораздо быстрее
- легче читать
- Не нужно использовать несколько
or
- меньше ввода
- легче поддерживать в больших запросах
- широко используется
Больше материалов:
SQL IN Direct гораздо быстрее, чем несколько OR-предложений
Ответ 5
Версия IN намного понятнее и, поскольку это один термин, позволяет избежать возможности пропущенных или некорректно структурированных круглых скобок, если вы добавляете другие термины в предложение WHERE.
Кроме того, я считаю, что больше реализаций SQL оптимизирует версию IN, предполагая, что индекс доступен.