mysql 工作台中的SQL查询优化

wkyowqbh  于 2023-01-20  发布在  Mysql
关注(0)|答案(1)|浏览(174)

在SQL中运行查询需要花费大量时间。
总共有240000000行和7700000个唯一行。
试着计算用户在3000到4000之间的平均日步数。

select count(distinct user_id) from (SELECT user_id,ROUND(AVG(IF(steps>'0',steps,NULL)),0) AS `Average Steps`
 FROM `step_activity`.`step_activities`  where user_id between '1100001' and '9999999' group by user_id 
 having  `Average Steps` between '3000' and '4000') as custlt3k;

只想知道用户总数。###

3z6pesqy

3z6pesqy1#

派生表(内部查询)中的GROUP BY使user_id不同。因此,不需要DISTINCT。请更改为简单的COUNT(*)
请提供SHOW CREATE TABLE,以便我们查看是否有以user_id开头的索引,这可能会有所帮助。此外,step_activities中有多少行,以及user_id between '1100001' AND '9999999'中有多少行。比较这些将确定是否使用该索引。
该任务要求读取所有行,至少是具有该用户范围的行,并将其“分组”。
此索引 * 可能 * 有助于:INDEX(user_id, steps),因为这将是一个“覆盖”索引。
另一件要考虑的事情是--不要用steps = 0存储任何行。毕竟,它们在这个查询中会被丢弃。(也许行中还有其他需要保留的列?)

相关问题