лучший способ запросить диапазоны в MySQL - PullRequest
0 голосов
/ 14 июня 2011

Я разрабатываю запрос, который извлекает строки из большой таблицы на основе параметров, выраженных в виде диапазонов (в частности, лет). В некоторых случаях я хочу извлекать строки на основе 3 конкретных значений (например, извлекать записи о клиентах, где номер клиента равен # 001, # 002 и # 003).

Что касается вопроса о диапазоне, мне интересно, есть ли синтаксис для условного оператора WHERE, который работает быстрее, чем другие:

IN ()

BETWEEN ()

high.range> = data> = low.range

Для опции IN () я мог бы написать скрипт, который переводит годы в список лет от низкого до высокого включительно. Таким образом, для диапазона от 2000 до 2004 года это будет IN («2000», «2001», «2002», «2003», «2004»). Это было бы дополнительным шагом программирования вне MySQL, но это не сложно для меня.

Я понимаю, что есть и другие вещи, которые я могу сделать, чтобы ускорить процесс (например, использование кластерного индекса), но я просто хотел посмотреть, есть ли какое-то отличие от того, какой синтаксис sql использовать после оператора WHERE.

Ответы [ 2 ]

0 голосов
/ 14 июня 2011

за кулисами между работами, как в high.range> = data> = low.range

In (условие1, условие2, условие3) работает так же, как (условие1 или условие2 или условие3)

Я бы ожидал, что между ними будет работать быстрее, если число даты больше 1 или 2.

аналогично (1000> 1001) против (1000 = 998 или 1000 = 996 или 1000 = 995 и т. Д.).

0 голосов
/ 14 июня 2011

Редактировать: извините, возможно, я неверно истолковал ваш вопрос.

Я считаю, что between в этом случае является более подходящей функцией для in, но я бы хотел провести некоторый сравнительный анализ, чтобы быть уверенным.1005 *


Если вы используете столбец TIMESTAMP, DATE или DATETIME, вы можете использовать year:

where year(column) > 2000 or year(column) < 2005

Есть для month, week и *Также работает 1014 *.

http://dev.mysql.com/doc/refman/5.1/en/datetime.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...