mysql

执行计划(EXPLAIN)分析SQL

2021-07-12  本文已影响0人  Duanty

什么是执行计划?

使用EXPLAIN关键字可以模拟优化器执行SQL查询语句, 从而知道MySQL是如何处理你的SQL语句的. 分析你的查询语句或是表结构的性能瓶颈.

执行计划的作用

1.确认表的执行顺序.
2.哪些索引可以使用? 哪些索引被具体使用?
3.每张表被扫表查询的行数等.

执行计划语法

在查询sql语句前面加上EXPLAIN即可. 例: explain select * from User

执行计划包含的信息:

image.png

1. ID列

描述select查询的执行序号, 包含一组数字. 表示查询中执行select子句或操作表的顺序.

根据ID数值分以下情况:

2. select_type列

查询的类型.(主要用于区别普通查询, 联合查询,子查询等复杂的查询)
具体类型:

3. table列

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

4. partitions列

该列显示的为分区表命中的分区情况. 非分区表该字段为空(null).

5. type

按照最好到最差的连接类型依次为:system, const, eq_ref, ref, fulltext, ref_or_null, index_merge, unique_subquery, index_subquery, range, index, ALL
除了ALL之外, 其他的type都可以使用到索引, 除了index_merge之外, 其他的type只可以用到一个索引.

6. partitions_keys

显示了MySQL在查找当前表中数据的时候可能使用到的索引, 实际意义不大

7. key

显示了MySQL在实际查找数据时决定使用的索引, 如果该字段值为NULL, 则表明没有使用索引

8. key_len

9. ref

如果是使用的常数等值查询,这里会显示const,如果是连接查询,被驱动表的执行计划这里会显示驱动表的关联字段,如果是条件使用了表达式或者函数,或者条件列发生了内部隐式转换,这里可能显示为func
列值一般为: 数据库.表.列,const

10. rows

这是mysql估算的需要扫描的行数(不是精确值). 这个值非常直观显示 SQL的效率好坏, 原则上rows越少越好

11. filtered

这个字段表示存储引擎返回的数据在server层过滤后, 剩下多少满足查询的记录数量的比例, 注意是百分比, 不是具体记录数(新特性)

12. extra

包含不适合在其他列中显示但十分重要的额外信息

执行计划记录完结

上一篇 下一篇

猜你喜欢

热点阅读