如何查看MySQL的执⾏计划
oracle数据库中文教材电子版
⼀、EXPLAIN语法
语法:EXPLAIN SELECT
1、EXPLAIN EXTENDED SELECT 将执⾏计划“反编译”成SELECT语句,运⾏SHOW WARNINGS 可得到被MySQL优化器优化后的查询语句
2、EXPLAIN PARTITIONS SELECT ⽤于分区表的EXPLAIN
3、在Navicat图形化界⾯中,点击“解释”出现执⾏计划的信息
⼆、执⾏计划中的信息
1、id:包含⼀组数字,表⽰查询中执⾏select⼦句或操作表的顺序。id相同,可以认为是⼀组,从上往下顺序执⾏;在所有组中,id值越⼤,优先级越⾼,越先执⾏。
2、select_type:主要⽤于区别普通查询, 联合查询, ⼦查询等复杂查询。
SIMPLE:查询中不包含⼦查询或者UNION
mysql查看所有存储过程查询中若包含任何复杂的⼦部分,最外层查询则被标记为:PRIMARY
在SELECT或WHERE列表中包含了⼦查询,该⼦查询被标记为:SUBQUERY
在FROM列表中包含的⼦查询被标记为:DERIVED(衍⽣)
若第⼆个SELECT出现在UNION之后,则被标记为UNION;若UNION包含在FROM⼦句的⼦查询中,外层SELECT将被标记为:DERIVED
从UNION表获取结果的SELECT被标记为:UNION RESULT
通过混淆js代码让别人(很难)无法还原3、type:表⽰MySQL在表中到所需⾏的⽅式,⼜称“访问类型”(ALL、index、range、ref、eq_ref、const、system、NULL),由左⾄右,由最差到最好
ALL:Full Table Scan, MySQL将遍历全表以到匹配的⾏
index:Full Index Scan,index与ALL区别为index类型只遍历索引树
range:索引范围扫描,对索引的扫描开始于某⼀点,返回匹配值域的⾏,常见于between、<、>等的查询
ref:⾮唯⼀性索引扫描,返回匹配某个单独值的所有⾏。常见于使⽤⾮唯⼀索引即唯⼀索引的⾮唯⼀前缀进⾏的查
eq_ref:唯⼀性索引扫描,对于每个索引键,表中只有⼀条记录与之匹配。常见于主键或唯⼀索引扫描
const、system:当MySQL对查询某部分进⾏优化,并转换为⼀个常量时,使⽤这些类型访问。如将主键置于where列表中,MySQL就能将该查询转换为⼀个常量
system是const类型的特例,当查询的表只有⼀⾏的情况下,使⽤system
NULL:MySQL在优化过程中分解语句,执⾏时甚⾄不⽤访问表或索引
4、possible_keys:指出MySQL能使⽤哪个索引在表中到⾏,查询涉及到的字段上若存在索引,则该索引将被列出,但不⼀定被查询使⽤
5、key:显⽰MySQL在查询中实际使⽤的索引,若没有使⽤索引,显⽰为NULL
查询中若使⽤了覆盖索引,则该索引仅出现在key列表中
6、key_len:表⽰索引中使⽤的字节数,可通过该列计算查询中使⽤的索引的长度
key_len显⽰的值为索引字段的最⼤可能长度,并⾮实际使⽤长度,即key_len是根据表定义计算⽽得,不是通过表内检索出的
7、ref:表⽰上述表的连接匹配条件,即哪些列或常量被⽤于查索引列上的值
8、rows:表⽰MySQL根据表统计信息及索引选⽤情况,估算的到所需的记录所需要读取的⾏数java数组下标
9、Extra:包含不适合在其他列中显⽰但⼗分重要的额外信息
kmplayerUsing index:该值表⽰相应的select操作中使⽤了覆盖索引(Covering Index)。
MySQL可以利⽤索引返回select列表中的字段,⽽不必根据索引再次读取数据⽂件
包含所有满⾜查询需要的数据的索引称为覆盖索引(Covering Index)
注意:如果要使⽤覆盖索引,⼀定要注意select列表中只取出需要的列,不可select *,因为如果将所有字段⼀起做索引会导致索引⽂件过⼤,查询性能下降
Using where:表⽰MySQL服务器在存储引擎受到记录后进⾏“后过滤”(Post-filter),
如果查询未能使⽤索引,Using where的作⽤只是提醒我们MySQL将⽤where⼦句来过滤结果集
Using temporary:表⽰MySQL需要使⽤临时表来存储结果集,常见于排序和分组查询
Using filesort:MySQL中⽆法利⽤索引完成的排序操作称为“⽂件排序”
三、执⾏计划的局限
EXPLAIN不会告诉你关于触发器、存储过程的信息或⽤户⾃定义函数对查询的影响情况
slidedown有哪些用法
EXPLAIN不考虑各种Cache
EXPLAIN不能显⽰MySQL在执⾏查询时所作的优化⼯作
部分统计信息是估算的,并⾮精确值
EXPALIN只能解释SELECT操作,其他操作要重写为SELECT后查看执⾏计划

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