六, 常用优化技巧---主要内容和思路来源:开课吧学习笔记
1, 用 group by 代替 distinct 去重
在数据量大, 重复值多时, 能先使用 group by 去重的, 使用 group by 去重后再计算, 比之后再去重计算效率更高.
例如前面的例题中, 查询 2019 年购买后又退款的用户, 可以这样优化:
select a.user_name
from
(select user_name
from user_trade
where year(dt)=2019
group by user_name) a
join
(select user_name
from user_refund
where year(dt)=2019
group by user_name) b
on a.user_name=b.user_name;
2, 多维度聚合
需要对多个字段进行聚合运算, 一个字段一个字段的写 SQL 计算, 不如使用多维度聚合计算语句: grouping sets
, cube
和 rollup
.
2.01, 分别查询用性别, 城市, 等级分布:
select sex, city, level,
count(user_id)
from user_info
group by sex, city, level;
上述 sql 查询出来的是同一性别, 不同城市, 不同等级的分布, 而我们需要的结果是三个字段的结果是分开的:
select sex, city, level,
count(user_id)
from user_info
group by sex, city, level
grouping sets (sex, city, level);
sex | city | level | _c3 |
NULL | NULL | 1 | 33 |
NULL | NULL | 2 | 26 |
NULL | NULL | 3 | 30 |
NULL | NULL | 4 | 44 |
NULL | NULL | 5 | 30 |
NULL | NULL | 6 | 32 |
NULL | NULL | 7 | 35 |
NULL | NULL | 8 | 34 | </