10、MySQL的SQL优化之定位SQL的问题 - 系统的撸一遍MySQL

找出SQL慢的缘由

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

检查MySQL状态

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

//检查当前会话的状态
SHOW SESSION STATUS;
//检查全局状态
SHOW GLOBAL STATUS;

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

参数 说明
Com_select SELECT查询次数
Com_insert INSERT操做次数
Com_update update更新次数
Com_delete delete操做次数

innodb_rows_read性能

innodb_rows_inserted优化

innodb_rows_updatedspa

innodb_rows_deletedcode

select查询返回行数orm

update、insert、delete操做次数索引

Connections MySQL累计链接次数
Slow_queries 慢查询次数
Handler_read_key 索引查询数
Handler_read_rnd_next 读取下一行的次数

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

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

分析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对条件的优化,恒等条件的优化等信息,便于查询出性能瓶颈。

相关文章
相关标签/搜索