У меня есть две таблицы: новости и новости. Каждый раз при просмотре статьи идентификатор новости, IP-адрес и дата записываются в news_views.
Я использую запрос с подзапросом для извлечения наиболее просматриваемых заголовков из новостей, получая общее количество просмотров за последние 24 часа для каждого.
Он работает нормально, за исключением того, что для его запуска требуется от 5 до 10 секунд, предположительно потому, что в news_views есть сотни тысяч строк, и он должен пройти всю таблицу, прежде чем завершится. Запрос выглядит следующим образом: можно ли вообще его улучшить?
SELECT n.title
, nv.views
FROM news n
LEFT
JOIN (
SELECT news_id
, count( DISTINCT ip ) AS views
FROM news_views
WHERE datetime >= SUBDATE(now(), INTERVAL 24 HOUR)
GROUP
BY news_id
) AS nv
ON nv.news_id = n.id
ORDER
BY views DESC
LIMIT 15