You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Workbench中SQL查询优化:统计日均步数3000-4000的用户总数

SQL查询优化方案

原查询的问题分析

  • 外层count(distinct user_id)完全冗余,子查询已通过group by user_id得到唯一user_id集合,直接count(user_id)即可
  • 条件中steps>'0'存在隐式类型转换(若steps为数值类型),会导致索引失效,且数值比较无需用单引号包裹
  • 缺少针对性索引,导致分组计算时需扫描大量数据

优化后的SQL语句

SELECT COUNT(user_id)
FROM (
    SELECT user_id
    FROM `step_activity`.`step_activities`
    WHERE user_id BETWEEN '1100001' AND '9999999' -- 若user_id为数值类型,去掉单引号改为1100001、9999999
    GROUP BY user_id
    HAVING ROUND(AVG(CASE WHEN steps > 0 THEN steps END), 0) BETWEEN 3000 AND 4000
) AS custlt3k;

进一步性能优化建议

  • 创建联合索引:针对查询模式创建(user_id, steps)联合索引,数据库可直接通过索引完成分组与平均值计算,无需回表扫描全量数据
    CREATE INDEX idx_user_steps ON `step_activity`.`step_activities`(user_id, steps);
    
  • 统一数据类型:确保查询条件值的类型与字段类型一致,避免隐式类型转换导致索引失效
  • 提前过滤数据:若业务允许,在WHERE子句中加入时间范围等过滤条件,减少分组处理的数据量
  • 简化计算逻辑:若业务对精度要求不高,可去掉ROUND函数直接用AVG(...) BETWEEN 3000 AND 4000,降低计算开销

内容的提问来源于stack exchange,提问作者Dheeraj Kumar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 15:15:10