Вопрос

Есть ли лучшая производительность при запросе (особенно) MySQL следующего:

SELECT * FROM `table` WHERE `unix_date` BETWEEN 1291736700 AND 1291737300

над:

SELECT * FROM `table` WHERE `unix_date` >= 1291736700 AND `unix_date` <= 1291737300

Или между синтаксисом просто заменяется вторым SQL?

Это было полезно?

Решение

Насколько я помню, нет никакой разницы. Но посмотрите сами, если:

explain plan for 
SELECT * FROM `table` WHERE `unix_date` BETWEEN 1291736700 AND 1291737300

и:

explain plan for
SELECT * FROM `table` WHERE `unix_date` >= 1291736700 AND `unix_date` <= 1291737300

производить те же планы.

Другие советы

От документация:

  • expr МЕЖДУ min И max

Если expr Больше или равно min и expr меньше или равен max, Между возвращением 1, в противном случае он возвращает 0. Это эквивалентно выражению (min <= expr И expr <= max) Если все аргументы одинакового типа. В противном случае преобразование типа происходит в соответствии с правилами, описанными в разделе 11.2, «Преобразование типа в оценке выражения», но применяется ко всем трем аргументам.

Так что это действительно просто синтаксис сахар.

BETWEEN показывает более четкое намерение и читает лучше (что -то, что SQL намеревается сделать).

Три следующего оператора дадут тот же результат:

  1. i BETWEEN x AND y
  2. x <= i AND i <= Y
  3. i >= x AND i <= Y

Но в конфигурации 3 MySQL может (в зависимости от ваших индексов) использовать разные индексы: заказа имеет значение, и вы должны тестировать с помощью запроса, чтобы увидеть разницу

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top