как индекс используется между запросами - PullRequest
1 голос
/ 27 августа 2010

Как заставить мой индекс работать, когда я запрашиваю с помощью команды Between?

когда я объясняю запрос:

explain select * from table where Date between date1 and date2;

фактический ключ возврата будет использоваться NULL, как использовать мой индекс в этом случае?

Я прочитал некоторую документацию от MYSQL, они сказали, что индекс BTree должен использоваться здесь для>> или между запросами, однако в моем случае это не работает.

Пожалуйста, помогите

EDIT

explain  select * from table where Date between '2010-05-10 00:00:00' and '2010-06-10 00:00:00';
+----+-------------+--------+------+---------------+------+---------+------+--------+-------------+

| id | select_type | table  | type | possible_keys | key  | key_len | ref  | rows   | Extra       |
+----+-------------+--------+------+---------------+------+---------+------+--------+-------------+

|  1 | SIMPLE      | table| ALL  | date_index    | NULL | NULL    | NULL | 109024 | Using where |
+----+-------------+--------+------+---------------+------+---------+------+--------+-------------+

Ответы [ 2 ]

0 голосов
/ 27 августа 2010

Вы сравниваете поле даты и времени со строками в сравнении «больше_ меньше / меньше».Если вы используете приведение или функцию (например, UNIX_TIMESTAMP ()) и преобразуете также другие даты в unixtimestamp, это бы сработало, но разрушило бы использование индекса.Возможно, лучшим решением было бы сохранить дату в виде метки времени Unix в таблице и добавить индекс.Тогда вам нужно будет только:

select * 
from table 
where DateInUnixTimeStampFormat 
between UNIX_TIMESTAMP(date1) and UNIX_TIMESTAMP(date2)

ИЛИ

select * 
from table 
where DateInUnixTimeStampFormat 
> UNIX_TIMESTAMP(date1) and DateInUnixTimeStampFormat < UNIX_TIMESTAMP(date2)
0 голосов
/ 27 августа 2010

вам нужно сделать тип таблицы блокировки " AllPages ";

alter table [table] lock allpages
go

, после этого вы должны создать индекс для этого столбца (если вы можете создать кластерный индекс);

create nonclustered index ndx1 on [table] (col1, ...)
go

, которые запускаются;

sp_recompile [table]
go

и, наконец, снова посмотрите на свой q-план.Следует использовать индекс.

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