MySQL Explain的用法

2019-11-04  本文已影响0人  叫我胖虎大人

Explain关键字的作用

模拟Mysql优化器是如何执行SQL查询语句,用于分析查询语句或是表结构的性能瓶颈。


explain结果值及其含义:

参数值 含义
id 表示SELECT语句的编号;
select_type 表示SELECT语句的类型。该参数有几个常用的取值:
SIMPLE :表示简单查询,其中不包括连接查询和子查询;
PRIMARY:表示主查询,或者是最外层的查询语句;
UNION :表示连接查询的第二个或后面的查询语句;
table 表示查询的表;
type 表示表的连接类型。该参数有几个常用的取值:
const :表示表中有多条记录,但只从表中查询一条记录;
eq_ref :表示多表连接时,后面的表使用了UNIQUE或者PRIMARY KEY;
ref :表示多表查询时,后面的表使用了普通索引;
unique_ subquery:表示子查询中使用了UNIQUE或者PRIMARY KEY;
index_ subquery:表示子查询中使用了普通索引;
range :表示查询语句中给出了查询范围;
index :表示对表中的索引进行了完整的扫描;
all :表示此次查询进行了全表扫描; ----------- 该条SQL需要优化;
possible_keys 表示查询中可能使用的索引;如果备选的数量大于3那说明已经太多了,因为太多会导致选择索引而损耗性能, 所以建表时字段最好精简,同时也要建立联合索引,避免无效的单列索引;
key 表示查询使用到的索引;
key_len 表示索引字段的一长度;
ref 表示使用哪个列或常数与索引一起来查询记录;
rows 表示查询的行数;试图分析所有存在于累计结果集中的行数,虽然只是一个估值,却也足以反映 出SQL执行所需要扫描的行数,因此这个值越小越好;
filtered 通过过滤条件之后对比总数的百分比
Extra 表示查询过程的附件信息。

实例

演示SQL
表结构

①使用索引比未使用索引,扫描的行数更少查询速度更快;

②在查询语句中使用LIKE关键字进行查询时,如果匹配字符串的第一个字符为“%”时,索引不会被使用。如果“%”不是在第一个位置,索引就会被使用。

③使用多列索引时只有查询条件中使用了该索引中的第一个索引字段时,索引才会被使用。

注:create index index_age_sex on user(age,sex); age为第一个索引;

④查询语句只有OR关键字时,如果OR前后的两个条件列都是索引时,查询中将使用索引。只要OR前后有一个条件的列不是索引,那么查询中将不使用索引。

注: 1:where 语句里面如果带有or条件, myisam表能用到索引,innodb不行;2:必须所有的or条件都必须是独立索引;

经过普通运算或函数运算后的索引字段不能使用索引。

上一篇 下一篇

猜你喜欢

热点阅读