Что такое MySQL «Между» исполнением, а?
Вопрос
Есть ли лучшая производительность при запросе (особенно) 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 намеревается сделать).
Три следующего оператора дадут тот же результат:
i BETWEEN x AND y
x <= i AND i <= Y
i >= x AND i <= Y
Но в конфигурации 3 MySQL может (в зависимости от ваших индексов) использовать разные индексы: заказа имеет значение, и вы должны тестировать с помощью запроса, чтобы увидеть разницу