mysql derived2、Using temporary 和 Using filesort 优化记录
-- 业务每周查询一份报表,每次执行sql磁盘直接由49%涨到%93,执行了几次发现是sql用到了磁盘临时表,对sql进行了改写
-- 原查询sql:
SELECTCODE,NAME,num,GROUP_CONCAT(product_id) AS product_ids,GROUP_CONCAT(product_name) AS product_names
FROM(SELECTCOUNT(DISTINCT (psn.Psnid)) AS num,cus.CODE,cus.`name`,od.product_id,pr.NAME AS product_nameFROMmid_psn_copy AS psnJOIN customer AS cus ON cus.CODE = psn.PkCorpJOIN product_order_rel AS od ON od.customer_code = cus.CODEJOIN product AS pr ON pr.id = od.product_idWHEREpsn.`Status` = 1 AND od.`status` = 1GROUP BY od.customer_code , od.product_id) AS tt
GROUP BY CODE;-- 69 rows in set, 1 warning (34.54 sec)
-- 原执行计划
+----+-------------+------------+--------+---------------------------------------------------------------------------+------------------------------+---------+------------------------+--------+----------------------------------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+------------+--------+---------------------------------------------------------------------------+------------------------------+---------+------------------------+--------+----------------------------------------------+
| 1 | PRIMARY | <derived2> | ALL | NULL | NULL | NULL | NULL | 325296 | Using filesort |
| 2 | DERIVED | cus | index | idx_custom_code,idx_code_name | idx_code_name | 274 | NULL | 251 | Using index; Using temporary; Using filesort |
| 2 | DERIVED | psn | ref | idx_psn_pkcorp,idx_psn_Status,idx_pkcrop_status | idx_pkcrop_status | 157 | gmcloud.cus.code,const | 36 | Using index condition |
| 2 | DERIVED | od | ref | idx_customer_code_pdid_status,idx_product_id,idx_customer_code_product_id | idx_customer_code_product_id | 123 | gmcloud.cus.code | 36 | Using where; Using index |
| 2 | DERIVED | pr | eq_ref | PRIMARY | PRIMARY | 8 | gmcloud.od.product_id | 1 | NULL |
+----+-------------+------------+--------+---------------------------------------------------------------------------+------------------------------+---------+------------------------+--------+----------------------------------------------+
-- 第一次优化,去掉外层嵌套,把外层条件融合到当前sql
-- 加联合索引
-- alter table customer add key idx_code_name (`code`,`name`)
-- alter table product_order_rel add key idx_customer_code_pdid_status (`customer_code`,`product_id`,`status`)
SELECTCOUNT(DISTINCT (psn.Psnid)) AS num,cus.CODE,cus.`name`,GROUP_CONCAT(od.product_id) AS product_ids,GROUP_CONCAT(pr.NAME) AS product_namesFROMmid_psn_copy AS psnJOIN customer AS cus ON cus.CODE = psn.PkCorpJOIN product_order_rel AS od ON od.customer_code = cus.CODEJOIN product AS pr ON pr.id = od.product_idWHEREpsn.`Status` = 1 AND od.`status` = 1GROUP BY cus.CODE, od.customer_code , od.product_id;
-- 查看执行计划,虽然没有了DERIVED、derived2,但是看到还有Using temporary; Using filesort存在
+----+-------------+-------+--------+-------------------------------+-------------------------------+---------+-----------------------+------+----------------------------------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+--------+-------------------------------+-------------------------------+---------+-----------------------+------+----------------------------------------------+
| 1 | SIMPLE | cus | index | idx_custom_code,idx_code_name | idx_code_name | 274 | NULL | 251 | Using index; Using temporary; Using filesort |
| 1 | SIMPLE | psn | ref | idx_psn_pkcorp,idx_psn_Status | idx_psn_pkcorp | 152 | gmcloud.cus.code | 69 | Using index condition; Using where |
| 1 | SIMPLE | od | ref | idx_customer_code_pdid_status | idx_customer_code_pdid_status | 123 | gmcloud.cus.code | 36 | Using where; Using index |
| 1 | SIMPLE | pr | eq_ref | PRIMARY | PRIMARY | 8 | gmcloud.od.product_id | 1 | NULL |
+----+-------------+-------+--------+-------------------------------+-------------------------------+---------+-----------------------+------+----------------------------------------------+
-- 第二次优化,把group by 后边的od.customer_code , od.product_id去掉,在前边group_concat加上distinct
-- 在where条件和group by条件都加了联合索引
-- alter table customer add key idx_code_name (`code`,`name`)
-- alter table mid_psn_copy add key idx_pkcrop_status` (`PkCorp`,`Status`)
-- alter table product_order_rel add key idx_customer_code_product_id (`customer_code`,`product_id`,`status`)
-- 优化完的sql:
SELECTCOUNT(DISTINCT (psn.Psnid)) AS num,cus.CODE,cus.`name`,GROUP_CONCAT(distinct od.product_id) AS product_ids,GROUP_CONCAT(distinct pr.NAME) AS product_namesFROMcustomer AS cusJOIN product_order_rel AS od ON od.customer_code = cus.CODEJOIN mid_psn_copy AS psn ON psn.PkCorp = cus.CODEJOIN product AS pr ON pr.id = od.product_idWHEREpsn.`Status` = 1 AND od.`status` = 1GROUP BY cus.CODE;
-- 再次查看执行计划
+----+-------------+-------+--------+-------------------------------------------------+------------------------------+---------+------------------------+------+--------------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+--------+-------------------------------------------------+------------------------------+---------+------------------------+------+--------------------------+
| 1 | SIMPLE | cus | index | idx_code_name,idx_code | idx_code_name | 274 | NULL | 251 | Using index |
| 1 | SIMPLE | psn | ref | idx_psn_pkcorp,idx_psn_Status,idx_pkcrop_status | idx_pkcrop_status | 157 | gmcloud.cus.code,const | 36 | Using index condition |
| 1 | SIMPLE | od | ref | idx_product_id,idx_customer_code_product_id | idx_customer_code_product_id | 123 | gmcloud.cus.code | 36 | Using where; Using index |
| 1 | SIMPLE | pr | eq_ref | PRIMARY | PRIMARY | 8 | gmcloud.od.product_id | 1 | NULL |
+----+-------------+-------+--------+-------------------------------------------------+------------------------------+---------+------------------------+------+--------------------------+
-- 调整下表头顺序
SELECTcus.CODE,cus.`name`,COUNT(DISTINCT (psn.Psnid)) AS num,GROUP_CONCAT(DISTINCT od.product_id) AS product_ids,GROUP_CONCAT(DISTINCT pr.NAME) AS product_names
FROMcustomer AS cusJOINproduct_order_rel AS od ON od.customer_code = cus.CODEJOINmid_psn_copy AS psn ON psn.PkCorp = cus.CODEJOINproduct AS pr ON pr.id = od.product_id
WHEREpsn.`Status` = 1 AND od.`status` = 1
GROUP BY cus.CODE;
-- 69 rows in set (6.95 sec)
-- 执行sql后,查看临时表状态没有增加了
mysql> show status like '%tmp%';
+-------------------------+-------+
| Variable_name | Value |
+-------------------------+-------+
| Created_tmp_disk_tables | 0 |
| Created_tmp_files | 619 |
| Created_tmp_tables | 3 |
+-------------------------+-------+
优化待续。。。
mysql derived2、Using temporary 和 Using filesort 优化记录相关推荐
- mysql优化-oder by产生的Using temporary与Using filesort问题解决
下面的mysql代码因为order by的原因,出现了Using temporary与Using filesort,优化前代码如下 SELECT DISTINCT( tm.task_no ) task ...
- mysql using temporary_执行计划中Using filesort,Using temporary相关语句的优化解决_MySQL
bitsCN.com 昨天听开发人员提到,相关的彩票网页当中一个页面刷新的很慢,特别是在提取数据的时候, 今天早上一到,便去找开发人员要去相关的也没进行浏览,窥探哪些数据出现了问题,开发人员 使用PH ...
- MySQL 的索引是什么?怎么优化?
转载自 MySQL 的索引是什么?怎么优化? 摘要: 索引对大数据的查询速度的提升是非常大的,Explain可以帮你分析SQL语句是否用到相关索引. 索引类似大学图书馆建书目索引,可以提高数据检索的 ...
- 我的MYSQL学习心得(十六) 优化
原文:我的MYSQL学习心得(十六) 优化 我的MYSQL学习心得(十六) 优化 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看 ...
- mybatis与mysql调优_MySQL + mybatis的SQL优化方案
sql优化方案: 1.添加索引,在条件参数,关联参数上建立参数, 2.字段优化,需要什么字段查什么字段 3.模糊查询尽量使用: select * from tableName a where a.na ...
- 用MySql的查询分析语法explain来优化查询和索引
http://hi.baidu.com/wtnzone/item/beb83840a4971af4dd0f6c77 数据库最常见的操作就是查询了,我们经常要用"SELECT"语法对 ...
- MySQL 的索引、执行计划、优化器算法
SQL处理流程 INDEX 索引 索引介绍 索引:是排序的快速查找的特殊数据结构,定义作为查找条件的字段上,又称为键key,索引通过存储引擎实现: 索引相当于一本书的目录,可以优化查询. 优点: 索引 ...
- MySQL的批量更新和批量新增优化
MySQL的批量更新和批量插入优化 如果需要批量插入和批量更新操作就需要进行sql 的优化,否则近30万条数据的插入或更新就会耗费几分钟甚至更多的时间, 此文仅批量插入和批量更新的几种优化. 批量插入 ...
- Mysql中慢SQL的分析与优化
为何对慢SQL进行治理 从数据库角度看:每个SQL执行都需要消耗一定I/O资源,SQL执行的快慢,决定资源被占用时间的长短.假设总资源是100,有一条慢SQL占用了30的资源共计1分钟.那么在这1分钟 ...
最新文章
- [置顶]一步步构建大型网站架构
- ​多视图立体视觉: CVPR 2019 与 AAAI 2020 上的ACMH、ACMM及ACMP算法介绍
- 《研磨设计模式》chap8 生成器模式Builder
- 【QGIS入门实战精品教程】9.1:QGIS构建泰森多边形(Thiessen Polygon)实例精解
- 华为2019年校招(20届实习)机考题python版解答与思路(2019-3-13软件题)
- JS计算本周一和本周五的日期
- Mybatis01(结果集封装)
- STM32中断与事件
- mysql解压安装如何登录_如何安装windows解压版MySQL及开启报错
- 点亮两个发光管用c语言编辑,第二个试验:用单片机点亮一个闪烁的发光管-----51单片机汇编语言试验教程 - CSDN博客...
- lisp的vla函数画矩形_利用Lisp做Tin三角网建模(源代码)
- 2015-2020年各类国际会议与期刊基于图像的三维对象重建论文综述(2)——Encoder stage
- CentOS-6.3安装配置Tomcat-7
- win7下cmd乱码
- 股市投资时,寻找低市盈率标的
- 腾讯视频Node.js服务是如何支撑国庆阅兵直播高并发的?
- 高考首日,为梦想加油!
- C语言学习2:Hello World!详解
- JavaScript实时获取现货黄金,白银,美元指数价格代码
- java 转换pdf页面尺寸_Java PDF页面设置——页面大小、页边距、纸张方向、页面旋转...
热门文章
- SuperMap iMobile for Android开发入门(iMobile 10i + AS 3.6)
- Java 17 新特性尝鲜
- 随机访问MAC协议 知识梳理(ALOHA,CSMA,CSMA/CD,CSMA/CA)
- python如何对excel批量加密_批量解除excel密码保护 可多个密码,python
- 浅谈珠宝品牌推广的策略和方法
- 如何修改ant design mobile或者其他UI组件的全局样式
- 女性服务社群产品设计
- 【2017年第2期】开发商业智能应用 小心大数据“陷阱”
- ffmpeg amovie movie 无法读取文件错误 找不到C、D、E、F
- 女性必知的健康正确的洗澡方式