Дата индексации mysql против datetime в большой таблице аудита
У меня есть таблица аудита, которая в настоящее время работает на 25 млн строк в innodb и растет примерно на 1 млн строк в месяц. В настоящее время у меня есть индекс в столбце datetime. По соображениям производительности, если пользователь выполняет поиск, он ограничивается текущим днем. Будет ли производительность индекса лучше, если я разделю дату и время на два отдельных поля и получу индекс только для поля даты. Я подозреваю, что это также создаст меньший индекс, так как вы не индексируете каждую отдельную секунду поля datetime. Я также могу извлечь выгоду из раздела этой таблицы.
Ps. В настоящее время работает Percona 5.5.
1 ответ
Это зависит от того, как сформулирован запрос. Если запрос сформулирован как:
where date(datetimecol) = curdate()
Тогда индекс не будет использоваться. Добавление столбца даты с индексом улучшило бы производительность, если бы запрос был сформулирован как:
where datecol = curdate()
Если запрос сформулирован как:
where datetimecol >= curdate () and
datetimecol < date_add(curdate(), interval 1 day)
тогда индекс будет (вероятно) использоваться.