2010-12-07 2 views
32

Есть ли более высокая производительность при запросе в (в частности) MySQL из следующих действий:Что такое «BETWEEN» от mysql? ..

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

над:

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

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

ответ

31

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

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 

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

9

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

20

От the documentation:

  • expr МЕЖДУ min И max

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

Таким образом, это действительно просто синтаксис сахара.

1

Втроем следующее заявление будет производить тот же результат:

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

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

Смежные вопросы