2013-04-01 28 views
0

我有一个查询,找到最近的日期时评论是在一个特定页的文章提出:查找在MySQL最近评论日期 - 速度问题

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

喜@Daniel ,你能提供你的表格模式吗? – Neo

+0

在Transact-SQL中,您可以执行'SELECT TOP 1 ... FROM acx_comments WHERE ... ORDER BY created_on DESC'。只需将“TOP”转换为“LIMIT”,您应该适合MySQL。 –

+0

你有关于parent_id ....的索引吗? – alwaysLearn

回答

1

你应该PARENT_ID和created_on添加索引像

ALTER TABLE acx_comments添加索引parent_id_created_on(PARENT_ID, created_on)

重写查询

SELECT created_on,created_by_name,created_by_id,身体FROM acx_comments一个JOIN(SELECT MAX(created_on)作为created_on FROM acx_comments其中 PARENT_ID = '642')B关于a.created_on = b.created_on

+0

谢谢 - 但是,我在on子句中出现错误:'on子句'中的未知列'b.created_on' –

+0

@DanielC是我的错误,我忘了添加'as created_on'子句 – Neo

+0

太棒了 - 那是有效的。谢谢! –