我有一个包含三列的表 - appname,uid,rating。 我需要快速获得每个appname的平均评分。这是我的代码:
SELECT
t1.appname as applicationName,
Avg(t1.rating) as averageRating
FROM
`user_ratings` t1
GRO
t1.appname
问题是,在我的嵌入式服务器上这需要几秒钟,如果/ tmp填满,甚至可能会失败(我无法对此做任何事情,我也无法编辑my.cfg )。因此,我想在不使用临时的情况下这样做。
这是EXPLAIN的输出,显示tmp按预期使用:
1 SIMPLE t1 ALL 6399 Using temporary; Using filesort
如果没有Avg,查询会立即完成,并生成此EXPLAIN:
1 SIMPLE t1 index appname 452 6399 Using index
答案 0 :(得分:2)
INDEX(appname, rating)
这是GROUP BY
的最佳选择,它是“覆盖” - 也就是说,查询所需的所有数据都在索引中,无需进入“数据”(这是一个分开BTree)。
分区不帮助。
答案 1 :(得分:0)
"重"您的查询的一部分是 GROUP BY 。
尝试将 appname 设置为主索引,或按此字段进行分区。