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: индексированный столбец «created» отправляется функцией DATE и делает индекс неэффективным. Оптимизатору запросов известно только «создано», но не результат DATE (created). Оптимизированный запрос

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

приводит к желаемому результату за время 0,4 секунды.

Назад