2010-12-17 55 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