2013-04-01 30 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

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