mysql查询语句分析explaindesc⽤法
explain或desc显⽰了mysql如何使⽤索引来处理select语句以及连接表。可以帮助选择更好的索引和写出更优化的查询语句。
explain 数据表或 desc 数据表
显⽰数据表各字段含义
explain sql 或desc sql
显⽰sql执⾏效率
使⽤⽅法,在select语句前加上explain就可以了,如:
explain select * from statuses_status where id=11;
1,explain列的解释
table:查询的数据表
type:这是重要的列,显⽰连接使⽤了何种类型。从最好到最差的连接类型为const、eq_reg、ref、range、index和all。
possible_keys:显⽰可能应⽤在这张表中的索引。如果为空,没有可能的索引。可以为相关的域从where语句中选择⼀个合适的语句key:实际使⽤的索引。如果为null,则没有使⽤索引。很少的情况下,mysql会选择优化不⾜的索引。这种情况下,可以在select语句中使⽤use index(indexname)来强制使⽤⼀个索引或者⽤ignore index(indexname)来强制mysql忽略索引
key_len:使⽤的索引的长度。在不损失精确性的情况下,长度越短越好
ref:显⽰索引的哪⼀列被使⽤了,如果可能的话,是⼀个常数
rows:mysql认为必须检查的⽤来返回请求数据的⾏数,mysql完成此请求扫描的⾏数。
简单的mysql语句extra:关于mysql如何解析查询的额外信息。将在表4.3中讨论,但这⾥可以看到的坏的例⼦是using temporary和using filesort,意思mysql 根本不能使⽤索引,结果是检索会很慢。
2,type中各个值解释
(1)all:全表扫描,MySQL将遍历全表以到匹配的⾏
(2)index:index与ALL区别为index类型只遍历索引树
(3)range:索引范围扫描,对索引的扫描开始于某⼀点,返回匹配值域的⾏。显⽽易见的索引范围扫描是带有between或者where⼦句⾥带有<, >查询。当mysql使⽤索引去查⼀系列值时,例如IN()和OR列表,也会显⽰range(范围扫描),当然性能上⾯是有差异的。
(4)ref,使⽤⾮唯⼀索引扫描或者唯⼀索引的前缀扫描,返回匹配某个单独值的记录⾏。
explain select * from t1 where name='yayun';
(5)eq_ref,类似ref,区别就在使⽤的索引是唯⼀索引,对于每个索引键值,表中只有⼀条记录匹配,简单来说,就是多表连接中使⽤primary key或者 unique key作为关联条件。
explain select t1.name from t1, t2 where t1.id=t2.id;
(6)const,system,当MySQL对查询某部分进⾏优化,并转换为⼀个常量时,使⽤这些类型访问。如将主键置于where列表中,MySQL 就能将该查询转换为⼀个常量。system是const类型的特例,当查询的表只有⼀⾏的情况下,使⽤system。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论