SQL中Explain的⽤法
jenkins插件
Explain 介绍
在5.6以及以后的版本中,除过select,其他⽐如insert,update和delete均可以使⽤explain查看执⾏计划,从⽽知道mysql是如何处理sql语句,查看该SQL语句有没有使⽤上了索引,有没有做全表扫描。
所以我们深⼊了解MySQL的基于开销的优化器,还可以获得很多可能被优化器考虑到的访问策略的细节,运⾏SQL语句时哪种策略预计会被优化器采⽤,分析查询语句或者表结构的性能瓶颈。
作⽤
  1、表的读取顺序
  2、数据读取操作的操作类型
  3、哪些索引可以使⽤
  4、哪些索引被实际使⽤
  5、表之间的引⽤
php ajax实例
  6、每张表有多少⾏被优化器查询
Explain ⽤法
使⽤⽅法:explain + sql 语句。
c语言毕业设计可选题目
-- 实际SQL,查id > 1123598815738675259 的名字
select name from blade_menu where id > 1123598815738675259;
-- 查看SQL是否使⽤索引,前⾯加上Explain即可
Explain select name from blade_meun where
id > 1123598815738675259;
包含的字段如下:
信息描述
id 查询的序号,包含⼀组数字,表⽰查询中执⾏select⼦句或操作表的顺序**两种情况**
id相同,执⾏顺序从上往下
id不同,id值越⼤,优先级越⾼,越先执⾏
select_type 查询类型,主要⽤于区别普通查询,联合查询,⼦查询等的复杂查询
1、simple ——简单的select查询,查询中不包含⼦查询或者UNION
2、primary ——查询中若包含任何复杂的⼦部分,最外层查询被标记
3、subquery——在select或where列表中包含了⼦查询
4、derived——在from列表中包含的⼦查询被标记为derived(衍⽣),MySQL会递归执⾏这些⼦查询,把结果放到临时表中
5、union——如果第⼆个select出现在UNION之后,则被标记为UNION,如果union包含在from⼦句的⼦查询中,外层select 被标记为derived
6、union result:UNION 的结果
table输出的⾏所引⽤的表
type 显⽰联结类型,显⽰查询使⽤了何种类型,按照从最佳到最坏类型排序
1、system:表中仅有⼀⾏(=系统表)这是const联结类型的⼀个特例。
2、const:表⽰通过索引⼀次就到,const⽤于⽐较primary key或者unique索引。因为只匹配⼀⾏数据,所以如果将主键置于where列表中,mysql能将该查询转换为⼀个常量。
3、eq_ref:唯⼀性索引扫描,对于每个索引键,表中只有⼀条记录与之匹配。常见于唯⼀索引或者主键扫描。
4、ref:⾮唯⼀性索引扫描,返回匹配某个单独值的所有⾏,本质上也是⼀种索引访问,它返回所有匹配某个单独值的⾏,可能会多个符合条件的⾏,属于查和扫描的混合体。
5、range:只检索给定范围的⾏,使⽤⼀个索引来选择⾏。key列显⽰使⽤了哪个索引,⼀般就是where语句中出现了
5、range:只检索给定范围的⾏,使⽤⼀个索引来选择⾏。key列显⽰使⽤了哪个索引,⼀般就是where语句中出现了
between,in等范围的查询。这种范围扫描索引扫描⽐全表扫描要好,因为它开始于索引的某⼀个点,⽽结束另⼀个点,不⽤
全表扫描。sqldatediff
6、index:index 与all区别为index类型只遍历索引树。通常⽐all快,因为索引⽂件⽐数据⽂件⼩很多。
7、all:遍历全表以到匹配的⾏。
mysql语句的执行顺序
注意:⼀般保证查询⾄少达到range级别,最好能达到ref。
possible_keys指出MySQL能使⽤哪个索引在该表中到⾏
key显⽰MySQL实际决定使⽤的键(索引)。如果没有选择索引,键是NULL。查询中如果使⽤覆盖索引,则该索引和查询的select 字段重叠。
cba最新积分榜
key_len表⽰索引中使⽤的字节数,该列计算查询中使⽤的索引的长度在不损失精度的情况下,长度越短越好。如果键是NULL,则长度为NULL。该字段显⽰为索引字段的最⼤可能长度,并⾮实际使⽤长度。
ref显⽰索引的哪⼀列被使⽤了,如果有可能是⼀个常数,哪些列或常量被⽤于查询索引列上的值
rows根据表统计信息以及索引选⽤情况,⼤致估算出到所需的记录所需要读取的⾏数
Extra 包含不适合在其他列中显⽰,但是⼗分重要的额外信息
1、Using filesort:说明mysql会对数据适⽤⼀个外部的索引排序。⽽不是按照表内的索引顺序进⾏读取。MySQL中⽆法利⽤索引完成排序操作称为“⽂件排序”
2、Using temporary:使⽤了临时表保存中间结果,mysql在查询结果排序时使⽤临时表。常见于排序order by和分组查询group by。
3、Using index:表⽰相应的select操作⽤使⽤覆盖索引,避免访问了表的数据⾏。如果同时出现using where,表名索引被⽤来执⾏索引键值的查;如果没有同时出现using where,表名索引⽤来读取数据⽽⾮执⾏查询动作。
4、Using where :表明使⽤where过滤
5、using join buffer:使⽤了连接缓存
6、impossible where:where⼦句的值总是false,不能⽤来获取任何元组
7、select tables optimized away:在没有group by⼦句的情况下,基于索引优化Min、max操作或者对于MyISAM存储引擎优化count(*),不必等到执⾏阶段再进⾏计算,查询执⾏计划⽣成的阶段即完成优化。
8、distinct:优化distinct操作,在到第⼀匹配的元组后即停⽌同样值的动作。
SQL执⾏顺序
select name
from tb_user
where id >12
group by sex
having max(salary) >100
order by salary desc
extended关键字
extended关键字:仅对select语句有效,在Explain后使⽤extended关键字,可以显⽰filtered列显⽰了通过条件过滤出的⾏数的百分⽐估计值。
filtered列给出了⼀个百分⽐的值,这个百分⽐值和rows列的值⼀起使⽤,可以估计出那些将要和explain中的前⼀个表进⾏连接的⾏的数⽬。前⼀个表就是指explain 的 id列的值⽐当前表的id
⼩的表。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。