【发布时间】:2012-09-11 17:42:57
【问题描述】:
我正在研究一个简单的评级系统,正如我所问的Here
数据是半大的(10 万条记录),我有一个具有这种结构的速率表:
CREATE TABLE IF NOT EXISTS `rates` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`rate` int(10) unsigned NOT NULL DEFAULT '0',
`ip` int(10) unsigned DEFAULT NULL,
`imageid` int(10) unsigned NOT NULL DEFAULT '0',
`sdate` date DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `imageid` (`imageid`)
)
它存储每个图像的用户率。如您所见,我只有一个用于该表的键(imageid),用于另一个查询中的 OUTER JOIN...
但在这个没有任何 JOIN 的简单查询中,我也有问题:
SELECT r.imageid,COUNT(r.id) as cnt,AVG(r.rate) AS arate,MAX(r.sdate) as lastdate FROM rates r GROUP BY r.imageid
ORDER BY
arate DESC, cnt DESC,lastdate DESC
解释说查询是使用临时的;使用文件排序。在我的大型数据库中,这是一个问题,这个问题蔓延到我的主要 JOIN 查询。
有没有什么方法可以在不排序的情况下获得字段的最高平均值? (按AVG排序,不能使用索引)
【问题讨论】:
标签: mysql optimization indexing