0

我有一个查询要查找对特定页面文章发表评论的最近日期:

SELECT created_on , created_by_name, created_by_id , body 
FROM ac2012.acx_comments WHERE created_on IN (
SELECT MAX(created_on)
FROM ac2012.acx_comments WHERE parent_id = '642')

查询正在运行,打印出 parent_id 为 642 的最新评论日期。

但是,此查询大约需要 4 秒。相比之下,我的大多数查询平均只需要 0.1 秒。

我想知道 - 为什么需要这么长时间,我怎样才能让它更快?例如,我认为将其限制为 parent_id "642" 将通过仅查看 3 条评论行开始查询......这应该使得计算 created_on 的最大值不会花费很长时间。

任何建议,将不胜感激。也许应该将 WHERE 放在其他地方以优化速度?

请在此处查看表架构:https ://docs.google.com/spreadsheet/pub?key=0AjkotydroXWqdHBEOHAtalJpazROaHh3R0VpM0hZSlE&output=html

4

1 回答 1

1

你应该在 parent_id 和 created_on 上添加索引

更改表 acx_comments 添加索引 parent_id_created_on(parent_id, created_on)

重写你的查询

SELECT created_on, created_by_name, created_by_id, body FROM acx_comments a JOIN (SELECT MAX(created_on) as created_on FROM acx_comments where parent_id='642') b ON a.created_on=b.created_on

于 2013-04-01T05:22:50.827 回答