Explain
使用Explain关键字可以模拟优化器执行SQL查询语句,从而知道MySQL是如何处理我们所写的SQL语句。
使用
使用方式
explain + sql
EXPLAIN SELECT * FROM t_user
分析结果
id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
id
select查询的序列号,表示查询中执行select子句或操作的顺序
①、id相同——表明执行顺序为从上往下
EXPLAIN SELECT
tb_content.*
FROM
tb_content_category,
tb_content
WHERE
tb_content_category.id = tb_content.category_id
②、id不同——如果是子查询,id的序号会递增,id值越大优先级越高,越先被执行
EXPLAIN SELECT
tb_item.*
FROM
tb_item
WHERE
cid = (
SELECT
id
FROM
tb_item_cat
WHERE
id = (
SELECT
item_cat_id
FROM
tb_item_param
WHERE
id = 25
)
)
③、id有相同也有不同
id如果相同,认为是同一组,从上往下执行
id不同,id值越大,优先级越高,越先执行
select_type
查询的类型,主要用于区别普通查询、联合查询、子查询等的复合查询
分类
SIMPLE:简单的select 查询,查询中不包括子查询或者UNION
PRIMARY:查询中若包含任何复杂的子部分,最外层查询则被标记为
SUBQUERY:在SELECT或者WHERE列表中包含了子查询
DERIVED:在FROM列表中包含的子查询被标记为DERIVED(衍生)MYSQL会递归执行这些子查询,把结果放在临时表里
UNION:若第二个SELECT出现在UNION之后,则标记为UNION;若UNION包含在FROM子句的子查询中,外层 SELECT将被标记为:DERIVED
UNION RESULT:从UNION表获取结果的SELECT
SUBQUERY:在SELECT或者WHERE列表中包含了子查询
DERIVED:在FROM列表中包含的子查询被标记为DERIVED(衍生)MYSQL会递归执行这些子查询,把结果放在临时表里
UNION:若第二个SELECT出现在UNION之后,则标记为UNION;若UNION包含在FROM子句的子查询中,外层 SELECT将被标记为:DERIVED
UNION RESULT:从UNION表获取结果的SELECT
table
显示这一行的数据是关于那张表的
possible_type
显示可能应用在这张表中的索引,一个或者多个。查询涉及到的字段上若存在索引,则该索引将被列出,但不一定被查询实际使用。
key
实际使用的索引,如果为NULL,则没有使用索引
key_len
ref
rows
Extra