mysql sail_MySQL性能分析

Preface

本文是对MySQL中性能分析的EXPLAIN和PROFILE的介绍

EXPLAIN

EXPLAIN语句提供了有关SELECT语句的执行计划的信息。完整的EXPLAIN用法见官方文档

EXPLAIN返回SELECT语句中使用的每个表的一行信息。 它按照MySQL在处理语句时读取它们的顺序列出输出中的表。 MySQL使用嵌套循环连接方法解析所有连接。 这意味着MySQL从第一个表中读取一行,然后在第二个表,第三个表等中找到匹配的行。 处理完所有表后,MySQL将通过表列表输出所选列和回溯,直到找到有更多匹配行的表。 下一行从该表中读取,并且该过程继续下一个表.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25mysql> explain select * from help_category;

+----+-------------+---------------+------------+------+---------------+------+---------+------+------+----------+-------+

| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |

+----+-------------+---------------+------------+------+---------------+------+---------+------+------+----------+-------+

| 1 | SIMPLE | help_category | NULL | ALL | NULL | NULL | NULL | NULL | 40 | 100.00 | NULL |

+----+-------------+---------------+------------+------+---------------+------+---------+------+------+----------+-------+

1 row in set, 1 warning (0.00 sec)

<=====>

mysql> explain select * from help_category\G;

*************************** 1. row ***************************

id: 1

select_type: SIMPLE

table: help_category

partitions: NULL

type: ALL

possible_keys: NULL

key: NULL

key_len: NULL

ref: NULL

rows: 40

filtered: 100.00

Extra: NULL

1 row in set, 1 warning (0.00 sec)

北京

id

查询标识符

select_type

查询类型

table

显示这一行的数据是关于哪张表

partitions

使用的哪个分区

type

possible_keys

可能用到的索引

key

实际用到的索引

key_len

实际用到的索引的长度

ref

引用索引对应的表中哪些行

rows

该查询遍历了多少行数据

filtered

通过过滤条件之后对比总数的百分比

Extra

额外信息

select_type查询类型值

解释

SIMPLE

简单select(不使用union或子查询)

PRIMARY

最外面的select

UNION

union中的第二个或后面的select

DEPENDENT UNION

union union中的第二个或后面的select语句,取决于外面的查询

UNION RESULT

result union的结果

SUBQUERY

子查询中的第一个select

DEPENDENT SUBQUERY

subquery 子查询中的第一个select,取决于外面的查询

UNCACHEABLE SUBQUERY

不可缓存的子查询,必须重新评估外部查询的每一行

UNCACHEABLE UNION

union中的第二个或后面的select,且属于UNCACHEABLE SUBQUERY

type

从最好到最差的连接类型:

system > const > eq_ref > ref > fulltext > ref_or_null > index_merge > unique_subquery > index_subquery > range > index > ALL

ALL代表扫描了全表才确定结果。一般来说,得保证查询至少达到range级别,最好能达到ref。可以通过加索引等方法来优化。

PROFILE

当我们要对某一条sql的性能进行分析时,可以使用PROFILE来分析SQL语句的执行过程。

参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值