查看mysql执行计划

关键字:explain
图片:
Alt
执行计划字段含义:请点传送门
可以查看SQL执行计划的关键字有:select、delete、insert、update、replace
执行计划的ID列:可以为null,也可以是数字。
null的含义是:表示由多条SQL产生的结果集。
数字的含义是:表示SQL执行的顺序,ID值相同执行顺序由上至下,ID值越大优先级越高,越先被执行。
执行计划的select_type列:
值的含义
simple:不包含子查询或者union操作的查询。
primary:查询中如果包含任何子查询,那么最外层的查询则被标记为primary。
subquery:select列表中的子查询
dependent subquery:依赖外部结果的子查询
union:表示union操作的第二个或者是之后的查询的值
dependent union:表示当union作为子查询时,第二个或者是第二之后的查询select_type的值。
union result:表示union操作产生的结果集。
derived:出现在from子句中的子查询。
执行计划的table列:输出的数据行所在的表名称
<union M,N>:表示由ID为m,n查询union产生的结果集(临时表)。
或者表示由ID为N的查询产生的结果集(临时表)。
执行计划的partitions列:对于分区表时,显示查询的分区ID。未分区时值为null。
执行计划的type列:
执行计划的extra列:表示执行计划的扩展列。
distinct:优化distinct操作,在找到第一匹配的元组后即停止找同样值的动作。
not exists:使用not exists 优化查询。
using filesort:使用额外的操作来进行排序,通常出现在order by 或者group by查询中。
using index:使用了覆盖索引进行查询。
using temporary:MySQL需要使用临时表来处理查询,常见于子查询,排序,和分组等。
using where:需要在MySQL服务器层使用where条件来过滤数据。
select tables optimized away:直接通过索引来获取数据,不访问表(效率最高)。
执行计划possible_keys列:指出了MySQL可以使用那些索引来优化查询。
查询列所涉及到的列上的索引都会被列出来,但不一定会被使用。
执行计划key列:查询优化器会优化查询实际所使用的的索引。没有则会显示null。
执行计划:key_len列:表示索引字段最大的可能长度。key_len的长度是由字段定义计算而来,
并非数据的实际长度
执行计划ref列:表示利用索引进行查询时的值都来源于哪里。
执行计划rows列:表示MySQL通过索引统计信息,估算需要读取的行数。这个值是一个大概值。
执行计划filtered列:表示结果返回的行数占需要读取的行数的百分比。
值越大越好,也是一个大概值。

执行计划是无法展示存储过程,触发器,udf对查询的影响等这些信息的。

捕获有问题的SQL:
启用MySQL慢查询日志:
set global slow_query_log_file = /sql_log/slow_log.log;(设置慢查询的日志文件)
set global log_queryies_not_using_indexs = on;(设置记录未使用索引的查询)
set global long_query_time = 0.001;(设置查询时间超过多少为慢查询,根据实际来)
set global long_query_log = on;(启用慢查询日志)
查看MySQL慢查询的日志文件:
mysqldumpslow 日志文件名;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值