私は ここで尋ねたように、単純な評価システムに取り組んでいます
データはセミラージ(100kレコード)です。次の構造のレートテーブルがあります。
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`)
)
各画像のユーザーの割合を保存します。ご覧のとおり、別のクエリでOUTER JOINに使用されるこのテーブルのキー(imageid)があります...
しかし、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
Explainは、クエリが一時的なものを使用していると述べています。filesortを使用します。私の大規模なデータベースでは問題があり、この問題は私のメインのJOINクエリに広がります。
ソートせずにフィールドのトップ平均を取得する方法はありますか?(AVGでソートし、インデックスは使用できません)