用户反馈系统慢,但是没描述具体是哪里慢,登录到其mysql数据库中,通过slow.log分析查看,其中有个sql出现的频率较多,而且耗时较长,先拿这个sql分析一下:

SELECT s.userid,s.status,MAX(s.lastaccess) AS lastaccess FROM sessions s WHERE s.status=0 GROUP BY s.userid,s.status;

初步看到的信息:返回22条数据,但是Rows_examined几乎是整张表的条数,这里心里就有个眉目了。

如何优化呢,我们大概有个套路:

1. 采用explain对语句进行分析

explain SELECT s.userid,s.status,MAX(s.lastaccess) AS lastaccess FROM sessions s WHERE s.status=0 GROUP BY s.userid,s.status;

我们看到,key走的是sessions_1的索引,其实这里我们可以看出端倪,但是为了把sql优化的方法讲出来,咱们继续。

查看表的索引

查看表的状态

Avg_row_length不大(对于返回数据时,这个值可以供参考分析)

查看表的栏位

(没啥大的字段,与上面联合查询分析)

2. 使用profile分析sql在哪里消耗的时间长

(很好的一个工具,可惜5.7以后profile信息将逐渐被废弃,mysql推荐使用performance schema)

set profiling=on;(或者=1)

几乎所有的时间都消耗在Sending data上。

这里“Sending data”并不是单纯的发送数据,而是包括“收集 + 发送 数据”。那么排除发送数据的大小,基本确定,在收集数据上花的时间较长

3. 优化方案

根据sql,它要查询相同userid,status下的最近的登录记录,distinct by userid,status=0才22条,虽然用了索引,但是还是查询收集1千700万多条数据,有效发送数据才22条,所以这个不是效率最高索引,故创建复合二叉树索引(userid,status,lastaccess)

4. 查看优化后的效果

效率杠杠的

5. 总结

咱们大致说一下仅仅关于Mysql的一个优化思路:

1. 检查slow.log,通过mysqldumpslow 分析一下排名sql

2. 分析执行计划,查看表的状态,索引等信息

3. 分析执行过程,与配置文件信息一同查看分析

mysql profiling sending data_Mysql一次Sending data占用大量时间的深入分析优化案例相关推荐

  1. sending data mysql_MySQL查询中Sending data占用大量时间的问题处理

    原SQL执行计划: EXPLAIN SELECT tm.id, tm.to_no , tm.source_website_id , tm.warehouse_name , tm.target_webs ...

  2. mysql 1261 load data_Mysql错误积累001-load data导入文件数据出现1290错误

    错误出现情景 在cmd中使用mysql命令,学生信息表添加数据.使用load data方式简单批量导入数据. 准备好文本数据: xueshengxinxi.txt 文件  数据之间以tab键进行分割 ...

  3. mysql 远程load data_mysql导入数据load data infile用法整理

    有时候我们需要将大量数据批量写入数据库,直接使用程序语言和Sql写入往往很耗时间,其中有一种方案就是使用MySql Load data infile导入文件的形式导入数据,这样可大大缩短数据导入时间. ...

  4. mysql 子查询索引_mysql select中子查询中使用强制索引的优化案例

    1,朋友找我帮忙看下比较慢的sql语句 SELECT pg.product_goods_id, pg.product_id, pg.pdt_code, pg.pdt_name, pg.brand_na ...

  5. fastboot 刷system.img 提示 sending 'system' (*KB)... FAILED (remote: data too large)

    华为G6-C00卡刷提示OEMSBL错误,只能线刷 ,但是官方找不到线刷img镜像,无奈 网上下了个可以线刷的工具套件 流氓ROM . 使用HuaweiUpdateExtractor(工具百度)把官方 ...

  6. Linux下mysql数据库从服务器A只迁移DATA文件夹到服务器B

    Linux下mysql数据库从服务器A只迁移DATA文件夹到服务器B 操作流程 获取数据 迁移数据 运行新的数据库 后记 操作流程 前言:近期做了一个项目,由于mysql数据库中的数据比较庞大,考虑转 ...

  7. mysql快速导入亿级数据----load data

    mysql快速导入亿级数据 --- load data load data方法 实战:导入一亿数据 对比 load data方法 注意 csv文件路径问题 如果出现如上错误,需要将csv文件放到上述路 ...

  8. 面试mysql慢查询_剑指Offer面试题:如何定位并优化慢查询sql

    1.根据慢日志定位慢查询sql 使用以下命令查看相关系统变量属性: show variables like '%query%'; 主要看这三个属性: long_query_time : 10.0000 ...

  9. mysql中获取一天、一周、一月时间数据的各种sql语句写法

    来源:http://www.jb51.net/article/50505.htm 今天抽时间整理了一篇mysql中与天.周.月有关的时间数据的sql语句的各种写法,部分是收集资料,全部手工整理,自己学 ...

  10. MySQL第12天:MySQL索引优化分析之性能优化案例实践

    MySQL索引优化分析之性能优化案例实践 执行计划中各select_type含义可以看:MySQL第11天:MySQL索引优化分析之性能分析 https://weibo01.blog.csdn.net ...

最新文章

  1. Base64 算法原理,以及编码、解码【加密、解密】 介绍
  2. 使用Java流查询数据库
  3. 一个显示器分两个屏幕_桌面改造计划2.0:一个显示器不够那就两个,桌面好物分享...
  4. Scala学习笔记02:数据类型、常量与变量
  5. cacti监控 磁盘I/O
  6. 在哈佛的一场闭门会上,专家说全球各国都应设置“人工智能部长”
  7. 《jQuery Mobile快速入门》—— 1.6 可主题化的设计
  8. css模糊遮罩效果_CSS 半透明遮罩层
  9. CAD快速看图软件中孔轴投影教程
  10. 有哪些免费的软件资源分享网站,软件资源网站大全导航
  11. 回溯法解决最大团问题
  12. 设置linux服务器时间自动同步
  13. leetcode 799. 香槟塔 (Champagne Tower)
  14. Windows Metro Style颜色色值表
  15. SMS短信的编码规则
  16. 管路流体仿真matlab,MathWorks 在 Simscape 中新增建模和仿真流体系统功能
  17. GEE学习笔记(基础篇)更新中
  18. 微信吸粉实战二:腾讯新闻
  19. SolidWorks2016软件,SW2010-2016.Activator.GUI.SSQ激活闪退解决办法:
  20. CTFHub-web前置技能-请求方式、302跳转、cookie、基础认证、响应包源代码

热门文章

  1. python中pos什么意思_python pos是什么
  2. OpenDDS和RTI DDS内置数据类型的互联互通测试
  3. 日系插画学习笔记(二):结构与透视
  4. uniapp选择图片及图片预览的实现
  5. TestCenter Layer4-7分析
  6. U盘引导盘制作工具---Rufus
  7. 第三周上机实践项目 项目4--委派任务
  8. java 历届试题 农场阳光 蓝桥杯1040
  9. C语言练习-还原算术表达式
  10. 网页设计初学者可制作的简单网页——我的第二篇博客