Данный запрос делает выборку по числу повторений за последний час:
SELECT item_id, COUNT(*) FROM log
WHERE TIMESTAMPDIFF(MINUTE, access_time, NOW()) <= 60
GROUP BY item_id
ORDER BY COUNT(item_id) DESC
LIMIT 0,10
Но проблема в том, что MariaDB считает число всех повторяющихся значений в 4 млн записей, которые есть в моей базе данных и выполняется более 5-ти секунд. Можно ли ускорить данный запрос?
Для ускорения этого запроса надо сделать индекс, для ускорения поиска по дате:
create index log_date on log(access_time, item_id);
И переписать условие поиска на следующее:
access_time >= NOW()-interval 60 minute
Старайтесь всегда, все условия выборки писать так, что бы к колонкам таблицы не применялись никакие функции. Во первых БД приходится вычислять их поочередно для каждой строки и во вторых, использование индексов в этом случае становится невозможным, что приводит к полному сканированию таблицы.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Возможно ли в MySQL добавлять динамически псевдонимы полей?
В чате телеграма при нажате на номер телефона полученный в сообщение всплывает окошко с предложение звонить на номер или нетМожно ли с помощью...