2010-12-17 54 views

回答

3

您的查詢存在問題。何時爲每個組選擇了哪個item_created? MySQL默認會爲每個組選擇一個或多或少的隨機組(從組內)。由於每個組只使用一個item_created,因此需要臨時表對其進行排序。

我會建議你使用其中一個聚合函數,例如min()或max()來獲取一個定義好的item_created來排序。這仍然不能解決臨時表問題,item_id上的索引是關於您可以做的最好的。

SELECT item_id, max(item_created) as ic FROM titem 
GROUP BY item_id 
ORDER BY ic; 

這是有趣的是,一些數據庫如Oracle(有人告訴我)拋出和錯誤在你原來的查詢作爲item_created既不是在聚合函數所選擇的領域也不是該組中的條款。 MySQL可以被設置爲模仿這種行爲。

+0

item_created - 是一個非規格化字段(來自表項),因此對於一個uniq_id,item_created將是相同的。我將它非規範化的原因是使用索引進行排序。它完美的工作,直到我需要使用group-by。 – 2010-12-20 07:58:57

+0

您可能會覺得這篇文章很有趣。 http://dev.mysql.com/tech-resources/articles/debunking-group-by-myths.html – Jaydee 2010-12-20 09:30:47