今天开发提出需求,让统计数据,一询问才得知表中的数据量已达亿级以上。具体的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 |

+----+-------------+--------------+------------+-------+-------------------------------------------+-------------------+---------+------+---------+----------+--------------------------------------------------------+

| 1 | SIMPLE | medicare2017 | NULL | range | idx_zy_enter_date,idx_province_age_gender | idx_zy_enter_date | 4 | NULL | 4836248 | 100.00 | Using index condition; Using temporary; Using filesort |

执行计划中“Extra”中竟然出现了“Using temporary; Using filesort ”,看到这种情况我们就得进行优化了,虽然“type”列出现了“range”。出现这种情况是因为sql语句中使用了“group by”或者是“order by ”,然后进行了文件排序。

接着,我们就需要给group by后面的字段建立索引了,mysql索引原则是最左匹配前缀原则,我们给“id_province_code,age,gender”三字段添加一个复合索引(按照最左匹配原则):

alter table medicare2017 add index idx_ipc_age_gener(id_province_code,age,gender);

但一查看表结构

KEY `idx_province_age_gender` (`id_province_code`,`gender`,`age`)

早期已经建立好了,但是,怎么还会出现“Using temporary; Using filesort”,查看官档发现,group by 默认是要排序的,所以即使我们添加了索引,还是会引起文件排序。这样,我们的解决方案是:强制关闭排序:order by null

最后我们根据官方文档的建议,进行了sql的最终优化:

mysql> mysql> explain SELECT id_province_code,gender,age,COUNT(1),SUM(zy_days),SUMM(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 order by null;+----+-------------+--------------+------------+-------+-------------------------------------------+-------------------+---------+------+---------+----------+----------------------------------------+

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

+----+-------------+--------------+------------+-------+-------------------------------------------+-------------------+---------+------+---------+----------+----------------------------------------+

| 1 | SIMPLE | medicare2017 | NULL | range | idx_zy_enter_date,idx_province_age_gender | idx_zy_enter_date | 4 | NULL | 4836248 | 100.00 | Using index condition; Using temporary |

+----+-------------+--------------+------------+-------+-------------------------------------------+-------------------+---------+------+---------+----------+----------------------------------------+

查看执行计划,发现没有文件排序了,但是还是有“using tempory”,别着急,这是不重要的,只要执行sql的性能提升了就可以了

最终,运行最终优化后的sql发现比没有强制关闭排序的sql,整整快了将近4个小时(表中数据将近3亿,没关闭排序前的sql我运行了将近4个小时,还在跑,但优化后只跑了几十秒)看来优化的综合评估是很重要的。

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

  1. mysql数值比中文检索快_MySQL 千万 级数据量根据(索引)优化 查询 速度

    一.索引的作用 索引通俗来讲就相当于书的目录,当我们根据条件查询的时候,没有索引,便需要全表扫描,数据量少还可以,一旦数据量超过百万甚至千万,一条查询sql执行往往需要几十秒甚至更多,5秒以上就已经让 ...

  2. 【Elasticsearch】腾讯万亿级 Elasticsearch 内存效率提升解密 源码级别 性能优化

    1.概述 转载:腾讯万亿级 Elasticsearch 内存效率提升解密 这个东东,看了之后,里面性能优化.很有用. 万亿存储,开源协同 Elasticsearch( ES )是一款功能强大的开源分布 ...

  3. MySQL百万级、千万级数据多表关联SQL语句调优

    本文不涉及复杂的底层数据结构,通过explain解释SQL,并根据可能出现的情况,来做具体的优化,使百万级.千万级数据表关联查询第一页结果能在2秒内完成(真实业务告警系统优化结果). 希望读者能够理解 ...

  4. 亿级数据量场景下,如何优化数据库分页查询方法?

    摘要:刷帖子翻页需要分页查询,搜索商品也需分页查询.当遇到上千万.上亿数据量,怎么快速拉取全量数据呢? 本文分享自华为云社区<大数据量性能优化之分页查询>,作者: JavaEdge. 刷帖 ...

  5. mysql千万级数据索引查询_mysql千万级数据量根据索引优化查询速度

    (一)索引的作用 索引通俗来讲就相当于书的目录,当我们根据条件查询的时候,没有索引,便需要全表扫描,数据量少还可以,一旦数据量超过百万甚至千万,一条查询sql执行往往需要几十秒甚至更多,5秒以上就已经 ...

  6. mysql 1千万 like优化_MYSQL千万级数据量的优化方法积累

    1.分库分表 很明显,一个主表(也就是很重要的表,例如用户表)无限制的增长势必严重影响性能,分库与分表是一个很不错的解决途径,也就是性能优化途径,现在的案例是我们有一个1000多万条记录的用户表mem ...

  7. MySQL 百万级数据量分页查询方法及其优化

    来源:http://sina.lt/gauW 方法1: 直接使用数据库提供的SQL语句 语句样式: MySQL中,可用如下方法: SELECT * FROM 表名称 LIMIT M,N 适应场景: 适 ...

  8. mysql查询 百万_MySQL百万级数据分页查询优化

    前言 当需要从数据库查询的表有上万条记录的时候,一次性查询所有结果会变得很慢,特别是随着数据量的增加特别明显,这时需要使用分页查询.对于数据库分页查询,也有很多种方法和优化的点.下面简单说一下我知道的 ...

  9. 百度小程序坐拥三大亿级流量入口 如何低成本制作百度小程序?

    最近百度百度小程序的发展势头可谓是迅猛,上线4个月活跃用户就已经超过1.5亿,覆盖23个行业中的262各细分领域,基本覆盖我们生活的每个方面.而新一批的优秀案例也随之不断涌现: 百度小程序三大亿级流量 ...

最新文章

  1. php 判断是否有相同的ID,如果有就修改数据库字段,没有就插入数据库字段
  2. 在线转flv+flash在线录制视频
  3. shell函数的返回值不能大于255的问题
  4. 马斯克的“大脑改造计划”,还需要点亮哪些技能树?
  5. python中如何对dict对象进行排序
  6. 单一指责原则(Single Responsibility Principle) SRP
  7. golang解析IP到城市jsonRPC服务教程
  8. CSS 两列布局 之 左侧适应,右侧固定 3种方式
  9. c++常引用做参数可以有默认参数吗_最新Pandas.read_excel()全参数详解(案例实操,如何利用python导入excel)...
  10. 移动相机GoPro文件帮手—Helper for GoPro Files for Mac
  11. spring framework核心框架体系结构
  12. 浅析ERP系统—供应链
  13. 作为程序员如何赚到第一桶金?
  14. 2020ccf大学生计算机系统,云南大学学生获得2019CCF大学生计算机系统与程序设计竞赛西...
  15. 如何利用注册表修改开机启动程序并提高电脑开机速度!
  16. 图片拼图微信小程序源码_支持多模板制作和流量主
  17. 游戏金币单位换算管理类
  18. 1w存银行一年多少利息_五百万存银行 一年利息有多少呢?
  19. python里2f是啥意思_python中的format什么意思
  20. 初中计算机学业水平考试,初中信息技术学业水平考试知识点(操作题)

热门文章

  1. web公选课第三节2020.5.18
  2. 华为LINUX转换NTFS格式,linux中生成考核用的NTFS文件系统结构样例(一)
  3. python function terminated_calibre 打不开也转不了 并且出现错误 mobi转docx
  4. 【GitHub加速工具,让你的GitHub、StackOverflow网站流畅度快到飞起,建议收藏~】
  5. idea webapp目录404问题,war包方式运行
  6. LeetCode 897 递增顺序搜索树
  7. Extended Twin Composite Number
  8. html多条件检索折叠,八种方式实现多条件匹配
  9. PostgreSQL 压缩包 在win7上安装
  10. 如何联机调试和发布程序(99$)