explain

简介: explain

人们很少做他们相信是对的事,他们做比较方便的事,然后后悔。——鲍勃.迪伦

使用explain+SQL

作用:

表的读取顺序

数据读取操作的操作类型

哪些索引可以使用

哪些索引被实际使用

表之间的引用

每张表有多少行被优化器查询

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

id:查询的序列号,包含一组数字,表示查询中执行select字句或操作表的顺序

id值越大执行优先级越高,id相同情况下执行顺序从上到下

select_type:查询的类型,主要是用于区别普通查询、联合查询、子查询等的复杂查询

simple简单的select查询,不包含子查询、UNION

primary子查询的最外层

subquery子查询的内层

derived表示 FROM临时表,这个表被标记为衍生

unionunion后面的查询,若union包含在from字句的子查询中,外层select被标记为derived

union resultunion表获取结果的select

type:访问类型排列

从最好到最差

常用

system>const>eq_ref>ref>range>index>ALL

system系统表

const通过索引一次就找到了,例如主键查询

explain select * from user where id = ""

eq_ref连表唯一条件

selec * from user,user_info where user.id = user_info.id

ref返回匹配某个单独值的所有行

explain SELECT * FROM `user` WHERE HOST = "%"

range范围查询

select * from user where id between 0 and 10

index全索引扫描

select id from user

all全表扫描

全部

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

possible_keys:显示这张表可能用到的全部索引

key:实际用到的索引

key_length:索引使用的最大可能长度,为字节数,越短越好

ref:显示索引使用的列,const表示匹配常量

rows:估算查询需要读取的行数

Extra:额外信息

Using filesortmysql无法利用索引完成的排序叫文件排序

Using temporary:使用了临时表

Using index:用到了覆盖索引(Covering Index:查询的列被索引覆盖),同时出现using where,说明索引被用于查找,反之则用于读取数据

Using where:说明用到了where

Using join buffer:使用了连接缓存,多次join时出现

impossible wherewhere条件错误,例如id = xxx and id = xxx

select tables optimized away:没有group by时,优化MIN/MAX或者COUNT(*)

distinct:找到第一个匹配的元素后停止查找相同的值

相关文章
|
3月前
|
SQL 关系型数据库 数据库
在 Postgres 中使用子查询
【8月更文挑战第11天】
144 1
在 Postgres 中使用子查询
|
6月前
|
SQL 关系型数据库 MySQL
explain是什么?explain优缺点及如何使用explain优化SQL
explain是什么?explain优缺点及如何使用explain优化SQL
154 1
|
6月前
|
存储 关系型数据库 MySQL
MySQL查询执行计划详解(EXPLAIN)
一、单表查询 访问方法/访问类型: • const:通过主键值或唯一二级索引与一个常熟进行等值查询(不包括NULL),只会生成一条记录 • ref:普通二级索引与一个常数进行等值比较,可能生成多条记录 • ref_or_null:ref的前提下可以加上or key is null • range:对应的扫描区间为若干个单点扫描区间或范围扫描区间(不包括负无穷到正无穷的范围) • index:扫描区间为全表,但是可以在二级索引中扫描(因为二级索引每条记录占用空间更小,所以需要读的页更少) • all:直接扫描全部的聚集索引记录
|
SQL 机器学习/深度学习 存储
【MySQL系列】- Explain执行计划详解
【MySQL系列】- Explain执行计划详解
123 0
|
SQL 存储 缓存
Mysql优化之explain你真的会吗?
Mysql优化之explain你真的会吗?
74 0
|
存储 SQL 关系型数据库
Optimizing Queries with EXPLAIN(用explain来优化查询语句)
Optimizing Queries with EXPLAIN(用explain来优化查询语句)
42 0
|
SQL 存储 缓存
Mysql探索之Explain执行计划详解
Mysql探索之Explain执行计划详解
Mysql探索之Explain执行计划详解
|
SQL 关系型数据库 MySQL
使用explain分析你SQL执行计划
使用explain分析你SQL执行计划
|
SQL
explain分析查询
explain分析查询
61 0
|
关系型数据库 MySQL 开发者
explain 之 rows 介绍|学习笔记
快速学习 explain 之 rows 介绍
165 0
explain 之 rows 介绍|学习笔记