记录一次 mysql 百万级数据量使用group by 统计的优化

一份二次开发的项目一张消费表中存储啦400万+ 的数据,现在要求 按照消费人的id 统计出每个人的消费总金额,因为是二次开发的项目之前不知道表中到底有多少数据 直接就按照一般的sql ,发现查询速度巨慢,执行一次24s+,刚开始以为是客户数据库问题,没想到数据迁移到本地后还是很慢,一查看数据库条数 400多万条,话不多说直接上sql
优化前的sql
SELECT
u_id,
IFNULL(SUM(amount),0)amount ,SUM(IF(transaction_type=‘receipt’,amount,0))AS mount
FROM
‘表名称’
GROUP BY u_id
直接执行 巨慢 查看返回结果
在这里插入图片描述
刚开始觉得是没有索引的问题 执行下列sql 查看 SHOW INDEX FROM ‘表名称’ 返回结果如下图
在这里插入图片描述可以看到是有索引的 既然有索引 就要想着怎么取优化这段sql 也是问下度娘之后 使用FORCE INDEX()强制指定索引 抱着试一试的态度执行一次
优化后的sql
SELECT
u_id,
IFNULL(SUM(amount),0)amount ,SUM(IF(transaction_type=‘receipt’,amount,0))AS mount
FROM
‘表名称’
FORCE INDEX(索引名称)
GROUP BY u_id
执行结果如下
在这里插入图片描述
瞬间 由原来的26秒 降到差不多 4秒 ,先记录下来后面有更好的方法再更新

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值