Explain有什么用
当Explain
与SQL
语句一起使用时,MySQL
会显示来自优化器关于SQL执行的信息。也就是说,MySQL
解释了它将如何处理该语句,包括如何连接表以及什么顺序连接表等。
- 表的加载顺序
sql
的查询类型- 可能用到哪些索引,哪些索引又被实际使用
- 表与表之间的引用关系
- 一个表中有多少行被优化器查询
…..
Explain有哪些信息
Explain
执行计划包含字段信息如下:分别是id
、select_type
、table
、partitions
、type
、possible_keys
、key
、key_len
、ref
、rows
、filtered
、Extra
12个字段。
Explain执行计划详解
一、id
id:
:表示查询中执行select子句或者操作表的顺序,id
的值越大,代表优先级越高,越先执行。id
大致会出现 3种情况:
1、id
相同
看到三条记录的id
都相同,可以理解成这三个表为一组,具有同样的优先级,执行顺序由上而下,具体顺序由优化器决定。
2、id
不同
如果我们的SQL
中存在子查询,那么id
的序号会递增,id
值越大优先级越高,越先被执行 。当三个表依次嵌套,发现最里层的子查询id
最大,最先执行。
3、以上两种同时存在
将上边的SQL
稍微修改一下,增加一个子查询,发现id
的以上两种同时存在。相同id
划分为一组,这样就有三个组,同组的从上往下顺序执行,不同组id
值越大,优先级越高,越先执行。
二、select_type
select_type
:表示select
查询的类型,主要是用于区分各种复杂的查询,例如:普通查询
、联合查询
、子查询
等。
1、SIMPLE
SIMPLE
:表示最简单的 select 查询语句,也就是在查询中不包含子查询或者union
交并差集等操作。
2、PRIMARY
PRIMARY
:当查询语句中包含任何复杂的子部分,最外层查询则被标记为PRIMARY
。