【发布时间】:2010-03-28 01:58:23
【问题描述】:
我有两个表,news 和 news_views。每次查看文章时,news_views 中都会记录新闻 id、IP 地址和日期。
我正在使用带有子查询的查询来获取新闻中观看次数最多的标题,方法是获取每个标题在过去 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
【问题讨论】:
-
您的表上有哪些索引?
标签: mysql optimization subquery