MySQL优化之explain关键字学习笔记
孙玉超
2020-07-22 09:35:23
0 评论
851 浏览
0 收藏
0 赞
explain查询所包含的列
当我们用 explain 关键字分析一条SQL的时候,会出现以下10列。那么分别代表什么意思呢?
id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
分别查看每一列的含义
id
id相同的情况下,从上往下依次顺序执行。id不同的情况下,id越大表示优先级越高,越先执行。
如上图,id为 4 所代表的 table 高于 id 为 1,2,3 的先执行,同时有三个 id 为 4 的 table 。这三个 table 顺序执行。
select_type
table
数据来自哪张表,注意有些是衍生表。
type
表示当前表的访问类型。通常常见的有以下几种。从上到下性能逐渐降低,大多数情况下应该避免查询访问类型为 ALL。
type | 含义 | 举例 |
const | 表示通过索引一次就找到了,const 用于在 where 条件中比较 primary key 或者 unique 索引 | |
eq_ref | 唯一性索引扫描,对于每个索引键,表中只有一条记录与之匹配,常见于主键或唯一索引扫描 | 一般在join联查时,对于关联字段,table2都只有唯一一条数据匹配 |
ref | 非唯一性索引扫描,与eq_ref不同的是,返回匹配关联字段值得所有行,这意味着关联表匹配的数据可能不止一行 | 一般在join联查时,对于关联字段,table2都会有多条数据匹配,例如订单表和订单item表 |
range | 使用索引检索给定范围的行,一般where条件中出现 < 、 > 、between and 等 | |
index | 表示扫描整个索引树 | select order_id from order |
ALL | 全表扫描。遍历整张表数据文件 | select * from order |
possible_keys 、 key 、key_len
possible_keys 表示可能用到的哪些索引,key 表示实际上用到了哪些索引。key_len 表示索引长度或者说所占字节大小,有自己的计算规则。
ref 、rows
ref :显示索引的哪一列被使用了。rows :表示这次访问大致扫描了多少行数据。
Extra
MySQL 认为这一列的信息不应该放在其他列中,但是又非常重要。所以称为额外信息
待完善
转载请注明出处:转载请注明出处
上一篇 : 一道难倒大部分程序员的String面试题
下一篇 : MyBatis.xml文件中写法笔记记录