MySQL优化之分析查询语句

69 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第5天,点击查看活动详情

前言

上篇我们学习了MySQL中的数据库优化之慢查询日志实战演示。有兴趣的小伙伴可以阅读(MySQL慢查询日志实战演示)。
下面我们继续学习MySQL中的数据库优化之分析查询语句。

查看SQL的执行成本

我们可以通过SHOW PROFILE查看上条sql的执行成本。

show variables like 'profiling';
Variable_nameValue
profilingOFF

可以通过设置profiling='ON'来开启show profile。

set profiling='ON';
show variables like 'profiling';
Variable_nameValue
profilingON

查看当前会话有哪些profiles,使用如下语句:

show profiles;
Query_IDDurationQuery
10.00102332show variables like 'profiling'

从结果中能看到当前会话一共有1个查询,如果想要查看最近一次查询的开销,可以使用:

show profile;

通过show profile还可用查看cpu的开销等,有以下几个常用的查询参数。

  1. ALL:显示所有的开销信息
  2. BLOCK IO:显示块IO开销
  3. CONTEXT SWITCHES:上下文切换开销
  4. CPU:显示CPU开销信息
  5. IPC:显示发送和接收开销信息
  6. MEMORY:显示内存开销信息
  7. PAGE FAULTS:显示页面错误开销信息
  8. SOURCES:显示和Source_function,Source_file,Source_line相关的开销信息
  9. SWAPS:显示交换次数开销信息

分析查询语句

使用EXPLAIN分析查询语句。
版本支持情况

  1. MySQL5.6.3以前只能使用EXPLAIN SELECT,以后可以使用EXPLAIN SELECT,UPDATE,DELETE。
  2. 在5.7以前的版本中,想要显示partitions需要使用explain partitions命令,想要显示filtered需要使用explain extended命令。在5.7版本后,默认explain直接能显示partitions和filtered中的信息。

基本语法

EXPLAIN或DESCRIBE语句的语法形式如下:

EXPLAIN SELECT select_options
或者
DESCRIBE SELECT select_options

如果想看某个查询的执行计划的话,可以在具体的查询语句前边加一个EXPLAIN。

EXPLAIN SELECT 1;

EXPLAIN语句输出的列说明如下:

列名描述
id在一个大的查询语句中每个SELECT关键字都对应一个唯一的id
select_typeSELECT关键字对应的查询类型
table表名
partitions匹配的分区信息
type针对单表的访问方法
possible_keys可能用到的索引
key实际上使用的索引
key_len实际使用到的索引长度
ref当使用索引列等值查询时,与索引列进行等值匹配的对象信息
rows预估的需要读取的记录条数
filtered某个表经过搜索条件过滤后剩余记录条数的百分比
Extra一些额外的信息

今天先学习到这里,明天继续。