Подтвердить что ты не робот

Какая производительность 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?

4b9b3361

Ответ 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 BETWEEN min И max

Если 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-запроса, чтобы увидеть разницу