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, предполагая, что индекс доступен.