找出SQL慢的原因

谈到MySQL不得不说的就是大家都会遇到的性能问题,今天就记录一下SQL优化相关的技巧。

检查MySQL状态

通过检查SQL语句的状态有助于MySQL的优化,首先介绍 show status命令

//检查当前会话的状态

SHOW SESSION STATUS;

//检查全局状态

SHOW GLOBAL STATUS;

这个命令可以查看到MySQL中sql语句的执行状态,具体的如下:

参数

说明

Com_select

SELECT查询次数

Com_insert

INSERT操作次数

Com_update

update更新次数

Com_delete

delete操作次数

innodb_rows_read

innodb_rows_inserted

innodb_rows_updated

innodb_rows_deleted

select查询返回行数

update、insert、delete操作次数

Connections

MySQL累计连接次数

Slow_queries

慢查询次数

Handler_read_key

索引查询数

Handler_read_rnd_next

读取下一行的次数

通过以上的数据,可以检查出MySQL连接数量,决定是否使用链接池,索引利用率。

根据读写状况,可以了解到选择什么样的存储引擎更加合适。

分析SQL的执行计划

相信大家都不陌生多explain命令,用于检查SQL语句的执行计划,在索引优化的时候必不可少。

每次项目前都会开着SlowLog去压测,然后把满查询通过explain去分析。

首先介绍一下这个命令的常用用法:

//检查SQL语句执行计划

explain select * from user where username = 'fuckphp';

//查询MySQL优化后但语句执行计划

explain extended select * from user where username = 'fuckphp';

//查询MySQL分区信息的执行计划

explain partitions select * from user where username = 'fuckphp';

字段

描述

id

每个SELECT分配的ID

select_type

类型

说明

SIMPLE

简单表,不包含字查询或联表查询

PRIMARY

主查询,最外层的查询

UNION

union查询中后面的查询语句

SUBQUERY

字查询的第一个语句

table

表名

type

类型

说明

ALL

全表扫描

index

全索引扫描

range

索引范围扫描(大于小于之类的查询)

ref

非唯一或主键索引的等值查询

eq_ref

使用唯一或主键的查询

const

const:只有一个匹配行使用了唯一或主键查询

possible_keys

可能用到的索引

key

查询用到的索引

key_len

索引长度

rows

检索行数

Extra

补充信息

ref

与key一同检索的字段或常数

通过show profile分析SQL

除了explain还有show profile这个神器,来帮我们分析SQL语句的执行过程。

//查看是否支持

show @@have_profiling;

//在会话中开启profile

set profiling=1;

//查询当前会话执行过的SQL 包含queryid 查询时间、查询语句

show profiles;

//根据queryid查询执行过程中的时间

show profile for query queryid;

//查询全部执行信息

show profile all for query queryid;

//查询source、cpu、block io、context、page faults等信息 更多查看help profile;

show profile cpu for query queryid;

这个神器会在未来版本中被MySQL废除掉,已经不建议使用,官方建议在performance_schema的PROFILING表中进行查询。

SQL的追踪

MySQL5.6以后,可以使用strace命令对SQL语句进行追踪。

//开启strace

SET OPTIMIZER_TRACE="enabled=on";

//设置strace 输出格式为json

SET END_MARKERS_IN_JSON=on;

//查询SQL信息

select * from information_schema.OPTIMIZER_TRACE\G

在这个结果中可以查看到MySQL对条件的优化,恒等条件的优化等信息,便于查询出性能瓶颈。

mysql问题定位_十、MySQL的SQL优化之定位SQL的问题 - 系统的撸一遍MySQL相关推荐

  1. 七、MySQL中的字符集 - 系统的撸一遍MySQL

    2019独角兽企业重金招聘Python工程师标准>>> 什么是字符集? 计算中的字符文字集合(每个自负文字分配一个对应的数字),将字符集中的文字符号进行编码以便于计算机识别处理. 字 ...

  2. 多传感器融合定位十四-基于图优化的定位方法

    多传感器融合定位十四-基于图优化的定位方法 1. 基于图优化的定位简介 1.1 核心思路 1.2 定位流程 2. 边缘化原理及应用 2.1 边缘化原理 2.2 从滤波角度理解边缘化 3. 基于kitt ...

  3. SQL优化工具分享-SQL Tuning Expert Pro for Oracle Trial

    做开发离不开对于数据库的接触,也离不开对SQL的接触,一个优质的SQL,可以让系统性能提升到质的飞跃,一个糟糕的SQL,可以让系统奔溃.所以对于我们开发人员来说,很需要一个SQL性能优化工具,在这种情 ...

  4. SQL优化之基于SQL特征的改写

    SQL优化之基于SQL特征的改写 第一章 技术人生系列 · 我和数据中心的故事(第九期)SQL优化之基于SQL特征的改写 中亦安图 | 2016-03-21 22:04 前言 今天老K继续与大家分享第 ...

  5. 阿里M8级铁子整理出SQL手册:收获不止SQL优化,抓住SQL的本质

    有人就有江湖,有江湖就有IT系统,有IT系统就有数据库,有数据库就有SQL,SQL应用可一字概括: "广"".加之其简单易学,SOL实现也可一字概括:"乐&qu ...

  6. 阿里 M8 级大神整理出 SQL 手册:收获不止 SQL 优化,抓住 SQL 的本质

    什么是 SQL? 结构化查询语言(Structured Query Language)简称 SQL,是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询.更新和管理关系数据库 ...

  7. 阿里M8级大神整理出SQL手册:收获不止SQL优化,抓住SQL的本质

    有人就有江湖,有江湖就有IT系统,有IT系统就有数据库,有数据库就有SQL,SQL应用可一字概括: "广"".加之其简单易学,SOL实现也可一字概括:"乐&qu ...

  8. 【中亦安图】SQL优化之基于SQL特征的改写(9)

    第一章 技术人生系列 · 我和数据中心的故事(第九期)SQL优化之基于SQL特征的改写 中亦安图 | 2016-03-21 22:04 前言 今天老K继续与大家分享第九期. 周末老K宅在家观战了两局精 ...

  9. mysql 慢sql 十几秒_sql优化之慢sql耗时排查

    sql 语句性能分析 1.看 sql 语句执行时间 2.看 sql 的执行计划 3.查看 sql 的执行中各个环节耗时时间 4.查看mysql的执行进程,处理锁表的情况,命令 show PROCESS ...

最新文章

  1. 《Head First 设计模式》ch.3 装饰(Decorator)模式
  2. 口语学习Day7:今天聊聊美国超市的物价
  3. Lang.String
  4. Mysql-索引的基础和类型
  5. Android 自定义View实现QQ运动积分抽奖转盘
  6. yum第三方安装-软件包没签名及更新错误
  7. faster-rcnn tensorflow windows python 训练自己数据
  8. koa2-cors应答跨域请求实现
  9. HTTP协议(学习笔记)
  10. 的ppt_PPT丨清新淡雅年终总结PPT模板
  11. Linux Shell编程(3)——运行shell脚本
  12. android外接usb摄像头demo_手机通过USB连接打印机使用教程,手机连接打印机系列之二...
  13. 文字转语音怎么在线生成MP3格式的音频?
  14. weka下载安装以及源码运行
  15. 在Excel中批量生成复选框,也支持批量打勾批量删除,#excel插件
  16. 气功修炼常识之:调息、丹田呼吸、脐呼吸、体呼吸
  17. pdf编辑器免安装版_墙裂推荐!功能强大的PDF编辑器最新免安装版!
  18. [转载]雅礼中学2012届高三年级第三次阶段考试试卷
  19. 学习笔记:LM2662开关电容器电压转换器
  20. 构造方法以及构造方法的重载

热门文章

  1. C#中修改文件或文件夹的权限,为指定用户、用户组添加完全控制权限
  2. C++多线程编程(入门实例)
  3. object 'libproxychains.so.3' from LD_PRELOAD cannot be preloaded
  4. php怎么做免登录,php---一周内免登录
  5. 依赖编译_开源项目的编译优化实践
  6. ios 自己服务器 苹果支付_iOS应用内支付(IAP)服务端端校验详解
  7. Android开发之添加QQ群的方法(官方代码)
  8. java 优化 寄存器_JVM性能优化系列-(6) 晚期编译优化
  9. SVN:This client is too old to work with working copy…解决方法
  10. Reachability,ios检测网络使用环境