通过一个实例给大家分享了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查询慢问题相关推荐

  1. 【MySQL系列5】深入分析MySQL中锁并详解锁解决幻读问题

    MySQL锁分析 MySQL系列文章汇总 前言 什么是锁 锁的分类 全局锁 表锁 行锁 共享锁 排他锁 意向锁 各种锁的兼容关系 锁到底锁的是什么 举例猜测 结论 行锁的算法 记录锁(Record L ...

  2. mysql的load data_【MySQL】load data语句详解(一)

    作者  罗小波 沃趣科技高级MySQL数据库工程师 load data语句详解 背景 数据库版本:MySQL 5.7.18 服务器信息:本地到处导入在10.10.30.241上演示,local远程导入 ...

  3. mysql count null_一个不可思议的MySQL慢查分析与解决

    点击上方蓝色字体,选择"标星公众号" 优质文章,第一时间送达 责任编辑:岚总链接:http://www.fordba.com/optimize-an-amazing-mysql-s ...

  4. mysql limit 含义_深入分析Mysql中limit的用法

    很久没用mysql的limit,一时大意竟然用错了,自认为(limit 开始,结束),其实错了,正确的应该是(limit 偏移量,条数),为了记住这次错误,转载一篇limit用法详解.推荐给大家,希望 ...

  5. 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 ...

  6. mysql count 返回0_如何在MySQL中使用COUNT時返回0而不是null

    我正在使用此查詢返回存儲在$ sTable中的歌曲列表以及存儲在$ sTable2中的總項目的COUNT.如何在MySQL中使用COUNT時返回0而不是null /* * SQL queries * ...

  7. MySQL count()函数

    转载自  MySQL count()函数 MySQL COUNT()函数介绍 COUNT()函数返回表中的行数. COUNT()函数允许您对表中符合特定条件的所有行进行计数. COUNT()函数的语法 ...

  8. 转帖-MySQL Innodb日志机制深入分析

    为什么80%的码农都做不了架构师?>>>    MySQL Innodb日志机制深入分析 http://blog.csdn.net/yunhua_lee/article/detail ...

  9. mysql count 条件_我以为我对MySql很了解,直到我面试了字节跳动

    小湿来到字节跳动,在静待,此时一位长发飘飘的面试官走来.小湿心里想:哎啊,今天遇到个美女面试官,好好表现 面试官:小湿,我看你简历上写了熟练掌握MySql和MySql的调优是吧? 小湿:是的,面试官. ...

  10. mysql count null_MySQL函数大全及用法示例

    需要SQL学习资料的同学见文末的资料领取方法. 1.字符串函数 ascii(str)   返回字符串str的第一个字符的ascii值(str是空串时返回0)  mysql> select asc ...

最新文章

  1. C# 图片旋转360度程序
  2. centos6 升级gcc / 无法识别的命令行选项“-std=gnu++1y”的解决办法
  3. java中怎么进行字符串替换?
  4. 用命令导入导出MS SQL数据
  5. java面向对象计算机与CD实验,Java面向对象上机实验指导书.doc
  6. maven执行package命令解析配置文件中的占位符进行替换
  7. 2021-09-23
  8. keras python3.7_主页 - Keras 中文文档
  9. 自动驾驶硬件系统架构概述
  10. IndentationError: expected an indented block缩进没问题但是出错
  11. 《老路用得上的商学课》46-50学习笔记
  12. 51单片机系列--蜂鸣器
  13. 小米手机不能发短信的一种解决方法--重新设置短信中心号码
  14. linux下打开xls文件怎么打开方式,xls是什么文件格式?xls文件怎么打开?
  15. Shell 使用 expr 进行数学运算
  16. VS错误代码以及解决方案
  17. 基于百度AI做内容审核
  18. Linux系统之进入单用户模式的方法及相关作用
  19. Java集合的接口和类层次结构图以及代码示例
  20. 一维数组的使用:逆序输出数据/:任意输入5个数据,存放于数组,编程实现将这5个数据逆序存放并输出

热门文章

  1. 微信公众号调取相册和摄像头功能,实现图片上传
  2. 全向轮算法/万向轮算法/福来轮算法/全向轮漂移算法/万向轮漂移算法/福来轮漂移算法
  3. GridView分页 记录总数:15 总页数:2 当前页:1 首页 上一页 下一页 尾页 GO
  4. 360商城页面练习(html+css+js)
  5. JSP页面中用绝对路径显示图片
  6. 搭载网站的云服务器需要空间备案,网站空间要备案吗
  7. PAT甲级1146 Topological Order (25 分)
  8. 使用Flash在线制作头像
  9. grasps元素_无摩擦力是什么意思
  10. Vmware Workstation 无法连接到虚拟机,请确保您有权运行该程序。