我有一个查询来查找对特定网页文章发表评论时的最新日期:
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
答案 0 :(得分:1)
你应该在parent_id和created_on上添加索引,如
AlTER TABLE acx_comments ADD INDEX parent_id_created_on(parent_id, created_on)
重写您的查询
SELECT created_on,created_by_name,created_by_id,body FROM acx_comments一个JOIN(SELECT MAX(created_on)as created_on FROM acx_comments where parent_id ='642')b ON a.created_on = b.created_on