首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >这个MySQL子查询可以优化吗?

这个MySQL子查询可以优化吗?
EN

Stack Overflow用户
提问于 2010-03-28 09:58:24
回答 1查看 166关注 0票数 1

我有两个表,新闻和news_views。每次浏览一篇文章时,新闻id、IP地址和日期都会记录在news_views中。

我正在使用一个带有子查询的查询,通过获取每个标题在过去24小时内的总点击量,从新闻中获取浏览量最大的标题。

它工作得很好,只是运行时间在5-10秒之间,大概是因为news_views中有成千上万的行,它必须遍历整个表才能完成。这个问题如下所示,有没有任何方法可以改进它?

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-03-28 10:08:04

我不认为你需要以派生表的形式计算视图的数量:

代码语言:javascript
复制
SELECT n.id, n.title, count( DISTINCT nv.ip ) AS views
FROM   news n
LEFT JOIN news_views nv  
ON nv.news_id = n.id
WHERE nv.datetime >= SUBDATE(now(), INTERVAL 24 HOUR)
GROUP BY n.id, n.title
ORDER BY views DESC LIMIT  15

这里最好的建议是通过EXPLAIN (或任何mysql的等价物)运行这些查询,看看查询将做什么-索引扫描,表扫描,估计成本等。避免全表扫描。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2531636

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档