开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第5天,点击查看活动详情
前言
上篇我们学习了MySQL中的数据库优化之慢查询日志实战演示。有兴趣的小伙伴可以阅读(MySQL慢查询日志实战演示)。
下面我们继续学习MySQL中的数据库优化之分析查询语句。
查看SQL的执行成本
我们可以通过SHOW PROFILE查看上条sql的执行成本。
show variables like 'profiling';
Variable_name | Value |
---|---|
profiling | OFF |
可以通过设置profiling='ON'来开启show profile。
set profiling='ON';
show variables like 'profiling';
Variable_name | Value |
---|---|
profiling | ON |
查看当前会话有哪些profiles,使用如下语句:
show profiles;
Query_ID | Duration | Query |
---|---|---|
1 | 0.00102332 | show variables like 'profiling' |
从结果中能看到当前会话一共有1个查询,如果想要查看最近一次查询的开销,可以使用:
show profile;
通过show profile还可用查看cpu的开销等,有以下几个常用的查询参数。
- ALL:显示所有的开销信息
- BLOCK IO:显示块IO开销
- CONTEXT SWITCHES:上下文切换开销
- CPU:显示CPU开销信息
- IPC:显示发送和接收开销信息
- MEMORY:显示内存开销信息
- PAGE FAULTS:显示页面错误开销信息
- SOURCES:显示和Source_function,Source_file,Source_line相关的开销信息
- SWAPS:显示交换次数开销信息
分析查询语句
使用EXPLAIN分析查询语句。
版本支持情况
- MySQL5.6.3以前只能使用EXPLAIN SELECT,以后可以使用EXPLAIN SELECT,UPDATE,DELETE。
- 在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_type | SELECT关键字对应的查询类型 |
table | 表名 |
partitions | 匹配的分区信息 |
type | 针对单表的访问方法 |
possible_keys | 可能用到的索引 |
key | 实际上使用的索引 |
key_len | 实际使用到的索引长度 |
ref | 当使用索引列等值查询时,与索引列进行等值匹配的对象信息 |
rows | 预估的需要读取的记录条数 |
filtered | 某个表经过搜索条件过滤后剩余记录条数的百分比 |
Extra | 一些额外的信息 |
今天先学习到这里,明天继续。