mysql count sending data_深入分析MySQL Sending data查询慢问题
通过一个实例给大家分享了mysql sending data表查询慢问题解决办法。
最近在代码优化中,发现了一条sql语句非常的慢,于是就用各种方法进行排查,最后终于找到了原因。
一、事故现场
select og.goods_barcode, og.color_id, og.size_id, sum(og.goods_number) as sold_number from order o
left join order_goods og on o.order_id = og.order_id where o.is_send = 0 and o.shipping_status = 0
and o.create_time > '2017-10-10 00:00:00' and o.ck_id = 1 and og.goods_id = 13421 and o.is_separate = 1 and o.order_status in (0, 1) and og.is_separate = 1
group by og.color_id, og.size_id
上面的这条语句是一个联表分组查询语句。
执行结果:
我们可以看到,这条语句用了 1.300 秒, 而 sending data 就用了 1.28 秒,占用了将近 99% 的时间,所以,我们对这个进行优化。
怎么优化呢?
二、sql语句分析三板斧
1、explain分析
对上边的语句进行 explain 分析:
explain select og.goods_barcode, og.color_id, og.size_id, sum(og.goods_number) as sold_number from order o
left join order_goods og on o.order_id = og.order_id where o.is_send = 0 and o.shipping_status = 0
and o.create_time > '2017-10-10 00:00:00' and o.ck_id = 1 and og.goods_id = 13421 and o.is_separate = 1 and o.order_status in (0, 1) and og.is_separate = 1
group by og.color_id, og.size_id
执行结果:
通过explain, 我们可以看到上边的语句,有用到索引key。
2、show processlist
explain看不出问题,那到底慢在哪里呢?
于是想到了使用 show processlist 查看sql语句执行状态,查询结果如下:
发现很长一段时间,查询都处在 “sending data”状态
查询一下“sending data”状态的含义,原来这个状态的名称很具有误导性,所谓的“sending data”并不是单纯的发送数据,而是包括“收集 + 发送 数据”。
这里的关键是为什么要收集数据,原因在于:mysql使用“索引”完成查询结束后,mysql得到了一堆的行id,如果有的列并不在索引中,mysql需要重新到“数据行”上将需要返回的数据读取出来返回个客户端。
3、show profile
为了进一步验证查询的时间分布,于是使用了 show profile 命令来查看详细的时间分布
首先打开配置:set profiling=on;
执行完查询后,使用show profiles查看query id;
使用show profile for query query_id查看详细信息;
三、排查优化
1.排查对比
经过以上步骤,已经确定查询慢是因为大量的时间耗费在了sending data状态上,结合sending data的定义,将目标聚焦在查询语句的返回列上面
经过一 一排查,最后定为到一个description的列上,这个列的设计为:descriptionvarchar(8000) default null comment '游戏描述',
于是采取了对比的方法,看看“不返回description的结果”如何。show profile的结果如下:
【解决方法】
找到了问题的根本原因,解决方法也就不难了。有几种方法:
1)查询时去掉description的查询,但这受限于业务的实现,可能需要业务做较大调整
2)表结构优化,将descripion拆分到另外的表,这个改动较大,需要已有业务配合修改,且如果业务还是要继续查询这个description的信息,则优化后的性能也不会有很大提升。
希望与广大网友互动??
点此进行留言吧!
mysql count sending data_深入分析MySQL Sending data查询慢问题相关推荐
- 【MySQL系列5】深入分析MySQL中锁并详解锁解决幻读问题
MySQL锁分析 MySQL系列文章汇总 前言 什么是锁 锁的分类 全局锁 表锁 行锁 共享锁 排他锁 意向锁 各种锁的兼容关系 锁到底锁的是什么 举例猜测 结论 行锁的算法 记录锁(Record L ...
- mysql的load data_【MySQL】load data语句详解(一)
作者 罗小波 沃趣科技高级MySQL数据库工程师 load data语句详解 背景 数据库版本:MySQL 5.7.18 服务器信息:本地到处导入在10.10.30.241上演示,local远程导入 ...
- mysql count null_一个不可思议的MySQL慢查分析与解决
点击上方蓝色字体,选择"标星公众号" 优质文章,第一时间送达 责任编辑:岚总链接:http://www.fordba.com/optimize-an-amazing-mysql-s ...
- mysql limit 含义_深入分析Mysql中limit的用法
很久没用mysql的limit,一时大意竟然用错了,自认为(limit 开始,结束),其实错了,正确的应该是(limit 偏移量,条数),为了记住这次错误,转载一篇limit用法详解.推荐给大家,希望 ...
- Importing/Indexing database (MySQL or SQL Server) in Solr using Data Import Handler--转载
原文地址:https://gist.github.com/maxivak/3e3ee1fca32f3949f052 Install Solr download and install Solr fro ...
- mysql count 返回0_如何在MySQL中使用COUNT時返回0而不是null
我正在使用此查詢返回存儲在$ sTable中的歌曲列表以及存儲在$ sTable2中的總項目的COUNT.如何在MySQL中使用COUNT時返回0而不是null /* * SQL queries * ...
- MySQL count()函数
转载自 MySQL count()函数 MySQL COUNT()函数介绍 COUNT()函数返回表中的行数. COUNT()函数允许您对表中符合特定条件的所有行进行计数. COUNT()函数的语法 ...
- 转帖-MySQL Innodb日志机制深入分析
为什么80%的码农都做不了架构师?>>> MySQL Innodb日志机制深入分析 http://blog.csdn.net/yunhua_lee/article/detail ...
- mysql count 条件_我以为我对MySql很了解,直到我面试了字节跳动
小湿来到字节跳动,在静待,此时一位长发飘飘的面试官走来.小湿心里想:哎啊,今天遇到个美女面试官,好好表现 面试官:小湿,我看你简历上写了熟练掌握MySql和MySql的调优是吧? 小湿:是的,面试官. ...
- mysql count null_MySQL函数大全及用法示例
需要SQL学习资料的同学见文末的资料领取方法. 1.字符串函数 ascii(str) 返回字符串str的第一个字符的ascii值(str是空串时返回0) mysql> select asc ...
最新文章
- C# 图片旋转360度程序
- centos6 升级gcc / 无法识别的命令行选项“-std=gnu++1y”的解决办法
- java中怎么进行字符串替换?
- 用命令导入导出MS SQL数据
- java面向对象计算机与CD实验,Java面向对象上机实验指导书.doc
- maven执行package命令解析配置文件中的占位符进行替换
- 2021-09-23
- keras python3.7_主页 - Keras 中文文档
- 自动驾驶硬件系统架构概述
- IndentationError: expected an indented block缩进没问题但是出错
- 《老路用得上的商学课》46-50学习笔记
- 51单片机系列--蜂鸣器
- 小米手机不能发短信的一种解决方法--重新设置短信中心号码
- linux下打开xls文件怎么打开方式,xls是什么文件格式?xls文件怎么打开?
- Shell 使用 expr 进行数学运算
- VS错误代码以及解决方案
- 基于百度AI做内容审核
- Linux系统之进入单用户模式的方法及相关作用
- Java集合的接口和类层次结构图以及代码示例
- 一维数组的使用:逆序输出数据/:任意输入5个数据,存放于数组,编程实现将这5个数据逆序存放并输出
热门文章
- 微信公众号调取相册和摄像头功能,实现图片上传
- 全向轮算法/万向轮算法/福来轮算法/全向轮漂移算法/万向轮漂移算法/福来轮漂移算法
- GridView分页 记录总数:15 总页数:2 当前页:1 首页 上一页 下一页 尾页 GO
- 360商城页面练习(html+css+js)
- JSP页面中用绝对路径显示图片
- 搭载网站的云服务器需要空间备案,网站空间要备案吗
- PAT甲级1146 Topological Order (25 分)
- 使用Flash在线制作头像
- grasps元素_无摩擦力是什么意思
- Vmware Workstation 无法连接到虚拟机,请确保您有权运行该程序。