2014-10-29 2 views
0

Можно ли добавить индекс в столбец типа datetime для таблицы с миллионом строки? Будет ли это замедлять запрос SELECT, если в запросе есть столбец datetime в where, например, where finishedon >=DATE_SUB(NOW(), INTERVAL 2 DAY) order by table_name.finishedon desc;индексирование mysql в столбец типа datetime

Здесь finishedon - это столбец с форматом даты и времени.

+1

индексы сделаны, чтобы сделать запрос выбора быстрее, однако перед применением индекса на огромной таблице не забудьте сначала сделать резервную копию. –

ответ

1

Выбрать будет быстро, если индексы указаны для указанного вами запроса, обратите внимание, если будет выполняться приведение типов DATETIME, то индекс не будет использоваться, но в этом случае его штраф.

Пожалуйста, используйте InnoDB двигатель, если обновления и вставки часто встречаются в таких больших БД для повышения производительности и избежать блокировки на уровне таблицы для более плавного выбирает

1

Для этого запроса:

select table_name.* 
from table_name 
where finishedon >= DATE_SUB(NOW(), INTERVAL 2 DAY) 
order by table_name.finishedon desc; 

Тогда ваш индекс поможет как для where, так и для order by.

Обратите внимание, что незначительные изменения в этом запросе могут сделать индекс менее полезным для того, чтобы он не был полезен вообще. Например:

where finshedon - interval 2 day >= now() 
order by table_name.finishedon desc 

не может использовать индекс вообще.

Аналогично:

where column = 'value' and finshedon - interval 2 day >= now() 
order by table_name.finishedon desc 

может также сделать индекс менее полезным, как можно join и group by.

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