Дата индексации 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)

тогда индекс будет (вероятно) использоваться.

Другие вопросы по тегам