SQL: низька продуктивність, незважаючи на індекс

Я щойно зіткнувся з такою проблемою продуктивності бази даних SQL: У таблиці SQL під назвою «користувачі» із ~ 1 000 000 записів визначення кількості реєстрацій сьогодні зайняло неприйнятні 28 секунд. Час реєстрації зберігався у форматі "Ymd H: i: s" у стовпці "створено".


Використовуваний запит

SELECT COUNT(ID) FROM users WHERE DATE(created) = '2014-12-21';

призвело до цього часу завантаження, хоча в стовпці "створено" формату DATETIME вже був індекс

ALTER TABLE `users` ADD INDEX `created` (`created`);

було встановлено. Причиною низької продуктивності є виклик функції DATE: індексований стовпець "створений" надсилається функцією DATE і робить індекс неефективним. Оптимізатор запитів знає лише "створено", але не результат DATE (створено). Оптимізований запит

SELECT COUNT(ID) FROM users WHERE created BETWEEN '2014-12-21' AND '2014-12-21 23:59:59';

призводить до бажаного результату за час 0,4 секунди.

Назад