mysql 亿级_mysql 亿级数据量 ( sum ,group by )的优化

今天开发提出需求,让统计数据,一询问才得知表中的数据量已达亿级以上。具体的sql如下:

SELECT id_province_code,gender,age,COUNT(1),SUM(zy_days),SUM(zf),SUM(ybnje)FROM medicare2017 WHERE zy_enter_date BETWEEN '2017-01-01 00:00:00' AND '2017-12-31 12:59:59' GROUP BY id_province_code,age,gender;

然后查看该sql的执行计划

mysql> explain SELECT id_province_code,gender,age,COUNT(1),SUM(zy_days),SUM(zf),SUM(ybnje) FROM medicare2017 WHERE zy_enter_date BETWEEN '2017-01-01 00:00:00' AND '2017-12-31 12:59:59' GROUP BYid_province_code,age,gender;+----+-------------+--------------+------------+-------+-------------------------------------------+-------------------+---------+------+---------+----------+--------------------------------------------------------+

| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于 MySQL 中的 SUMGROUP BY 操作的优化,可以考虑以下几个方面: 1. 索引优化:确保在用于 GROUP BY 和 SUM 的列上创建了适当的索引。这可以加快数据的检索和聚合操作。如果没有适当的索引,MySQL 将不得不执行全表扫描,导致性能下降。 2. 聚合函数优化:尽量减少在 GROUP BY 子句中使用聚合函数。聚合函数会增加计算的复杂度,可以考虑通过将聚合函数移至子查询或使用临时表来减少计算的数据量。 3. 分区表:如果数据量非常大,可以考虑使用分区表来分散数据的存储和查询负载。通过将数据分成多个分区,可以减少查询的范围,提高查询性能。 4. 查询优化器:MySQL 的查询优化器会根据统计信息和索引选择最优的执行计划。确保统计信息是最新的,并尽可能提供准确的查询提示(例如使用FORCE INDEX),以帮助优化器生成高效的查询计划。 5. 内存调优:适当配置 MySQL 的内存参数,例如 innodb_buffer_pool_size 和 sort_buffer_size,以确保足够的内存用于缓存数据和临时表,从而减少磁盘 I/O,提高查询性能。 6. 查询重写:有时可以通过改写查询语句来优化 SUMGROUP BY 操作。例如,可以使用子查询或临时表来预先计算聚合结果,然后再进行 GROUP BY。 以上是一些常见的优化策略,具体的优化方法应该根据实际情况进行调整和测试。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值