mysql最新版explain详解来自官网直译(6)

48 篇文章 0 订阅
为了得到执行计划的具体信息是以一个命名连接生成的,命令格式如下:
EXPLAIN [options] FOR CONNECTION connection_id;
EXPLAIN FOR CONNECTION返回的EXPLAIN信息就是当前被给出的连接所执行的查询的解析信息。因为数据的改变,也许会产生不同的结果当执行EXPLAIN去评估查询文本时。这种行为的不同能够对诊断更多瞬时行为问题有帮助。例如,如果你在一个session钟执行一个查询很慢,通过使用EXPLAIN FOR CONNECTION 在另外一个session也许可以获取关于查询延迟的有用信息。
connection_id 是连接的主键,可以通过INFORMATION_SCHEMA PROCESSLIST表获取或者SHOW PROCESSLIST执行来获取。
如果你有超级权限,你能够单独定义任何连接。否则,你只能定义你自己的连接。
如果被定义的连接没有执行任何查询,则结果集是空的。否则,EXPLAIN FOR CONNECTION 应用只有在被定义的连接上执行查询时会产生。当然包括select,delete,insert,update.(但是这个命令对prepared statement没有作用,即使是这种类型的prepared statements连接)。
如果被关联的连接执行了查询,那么具体的输出通过使用EXPLAIN查询本身就可以获取结果信息。
如果被关联的连接执行的不是查询,将会产生一个错误。例如,你不能在你当前session中定义connection identifier。因为EXPLAIN 对于当前session不可用。
具体例子如下:
mysql> SELECT CONNECTION_ID();
+-----------------+
| CONNECTION_ID() |
+-----------------+
|             373 |
+-----------------+
1 row in set (0.00 sec)


mysql> EXPLAIN FOR CONNECTION 373;
ERROR 1889 (HY000): EXPLAIN FOR CONNECTION command is supported
only for SELECT/UPDATE/INSERT/DELETE/REPLACE(该命令行只支持SELEC/UPDATE/INSERT/DELETE/REPLACE).
Com_explain_other 的状态变量说明了EXPLAIN FOR CONNECTION被执行的次数。
到此关于查看指定连接下的执行计划信息就结束了。接下来我们看8.8.5 Estimating Query Performance(评估查询性能)


大多数情况下,你可以通过统计磁盘访问量来评估查询性能的好坏。对于数据量少的表,你通常能够找到一行通过一次硬盘访问(因为索引可能被缓存了)。而对于数据量较大的表,表采用的是B-tree索引,你为了查询一行,需要多次访问才可以:log(row_count)/log(index_block_length/3*2/(index_length+data_pointer_length))+1。


在mysql中,一个索引块通常是1024bytes且数据指针是4bytes.对于一个500000行的表,一个key值的长度是3byte(中间数的尺寸)。通过公式log(500000)/log(1024/3*2/(3+4))+1=4次查找。
该索引大致要求存储500000*7*3/2=5.2MB(假设一个索引典型的缓存比例为2/3),所以你也许有大量索引在内存中,并且仅仅是一两次调用为了找到某一行值。
然而,为了写,你需要4次请求去确定哪儿是新索引的地方,并且正常情况下两次查找为了更新索引,写一行。


上述的讨论并不意味着你的应用性能差是因为logN.只要通过操作系统或者mysql服务器缓存一切,那么就只有一少部分会变慢。当表中数据变的大到无法缓存,需要磁盘寻道来完成事情的时候,就会变的非常慢(通过logN增加)。为了避免这钟情况,增加数据缓存的key缓存的大小。对于myisam表,key缓存的尺寸通过key_buffer_size系统变量来控制。
具体请看,5.1.1的服务器的配置。
到此EXPLAIN的详解就完全结束了。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值