Какая производительность mysql "BETWEEN" над..?
Есть ли лучшая производительность при запросе в (в частности) mysql следующего:
SELECT * FROM `table` WHERE `unix_date` BETWEEN 1291736700 AND 1291737300
над
SELECT * FROM `table` WHERE `unix_date` >= 1291736700 AND `unix_date` <= 1291737300
Синтаксис
или BETWEEN заменяется вторым sql?
Ответы
Ответ 1
Насколько я помню, нет никакой разницы. Но убедитесь сами, если:
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
создайте те же планы.
Ответ 2
Из документация:
Если expr
больше или равно min
, а expr
меньше или равно max
, BETWEEN возвращает 1, в противном случае он возвращает 0. Это эквивалентно выражению (min
<= expr
И expr
<= max
), если все аргументы одного типа. В противном случае преобразование типа происходит в соответствии с правилами, описанными в разделе 11.2, "Преобразование типов в Expression Evaluation", но применяется ко всем трем аргументам.
Итак, это действительно просто синтаксический сахар.
Ответ 3
BETWEEN
показывает более четкое намерение и лучше читает (что-то SQL должен выполнить).
Ответ 4
Три следующих утверждения приведут к такому же результату:
-
i BETWEEN x AND y
-
x <= i AND i <= Y
-
i >= x AND i <= Y
Но в конфигурации 3 mysql может (в зависимости от ваших индексов) использовать разные индексы: порядок вопросов, и вы должны тестировать с помощью EXPLAIN-запроса, чтобы увидеть разницу