目的取一段时间内 uid 对应消耗,然后划分区间
发现 group by uid
返回的数据越多越慢,这个从 SQL 下手有优化空间吗
MySQL 5.7
select
elt(interval(total, null, 300), '-INF~300', '300~INF') as section,
count(*) AS total
from (
select
uid,
SUM(gold) as total
from `table_name`
where `time` > 1640966400 and `time` <= 1642176000 group by `uid`
) as `tmp` group by `section`;
-- 执行了 3-4 秒
返回结果:
-INF~300 46319
300~INF 15060
EXPLAIN 结果:
select_type | table | type | possible_keys | rows | rows |
---|---|---|---|---|---|
PRIMARY | <derived2> | ALL | 217073 | Using temporary; Using filesort | |
DERIVED | table_name | index | time,uid | 434146 | Using where |
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.