http://blog.itpub.net/29254281/viewspace-1159014/

To see the effect of a query do the following steps:

FLUSH STATUS;
Execute the query
SHOW SESSION STATUS LIKE 'handler_read%';
Do an EXPLAIN of the query

实验数据初始化:

  1. CREATE TABLE test (
  2. id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY
  3. , data VARCHAR(32)
  4. , ts TIMESTAMP
  5. , INDEX (data)
  6. );
  7. INSERT INTO test
  8. VALUES (NULL, 'abc', NOW()), (NULL, 'abc', NOW()), (NULL, 'abd', NOW())
  9. , (NULL, 'acd', NOW()), (NULL, 'def', NOW()), (NULL, 'pqr', NOW())
  10. , (NULL, 'stu', NOW()), (NULL, 'vwx', NOW()), (NULL, 'yza', NOW())
  11. , (NULL, 'def', NOW())
  12. ;
  13. SELECT * FROM test;
  14. +----+------+---------------------+
  15. | id | data | ts                  |
  16. +----+------+---------------------+
  17. | 1  | abc  | 2008-01-18 16:28:40 |
  18. | 2  | abc  | 2008-01-18 16:28:40 |
  19. | 3  | abd  | 2008-01-18 16:28:40 |
  20. | 4  | acd  | 2008-01-18 16:28:40 |
  21. | 5  | def  | 2008-01-18 16:28:40 |
  22. | 6  | pqr  | 2008-01-18 16:28:40 |
  23. | 7  | stu  | 2008-01-18 16:28:40 |
  24. | 8  | vwx  | 2008-01-18 16:28:40 |
  25. | 9  | yza  | 2008-01-18 16:28:40 |
  26. | 10 | def  | 2008-01-18 16:28:40 |
  27. +----+------+---------------------+

Handler_read_first
全索引扫描的次数
The number of times the first entry was read from an index. 
If this value is high, it suggests that the server is doing a lot of full index scans.

Handler_read_key
走索引的次数
The number of requests to read a row based on a key. 
If this value is high, it is a good indication that your tables are properly indexed for your queries.

HANDLER_READ_NEXT
The number of requests to read the next row in key order. 
This value is incremented if you are querying an index column 
with a range constraint or if you are doing an index scan.


Handler_read_prev
The number of requests to read the previous row in key order. 
This read method is mainly used to optimize ORDER BY ... DESC.

Handler_read_rnd
文件排序或者没有使用索引
The number of requests to read a row based on a fixed position. 
This value is high if you are doing a lot of queries that require sorting of the result. 
You probably have a lot of queries that require MySQL to scan entire tables or you have joins that don't use keys properly.

Handler_read_rnd_next
此选项表明在进行数据文件扫描时,从数据文件里取数据的次数。
The number of requests to read the next row in the data file. 
This value is high if you are doing a lot of table scans. 
Generally this suggests that your tables are not properly indexed 
or that your queries are not written to take advantage of the indexes you have.

可以看到全表扫描其实也是走了key,可能是因为索引组织表的原因。因为limit 2 所以rnd_next为2.这个Stop Key在执行计划中是看不出来的。

使用索引消除排序,因为是升序,所以read first为1,由于limit 4,所以read_next为3.通过这个也可以看出Stop Key.

也是使用索引消除排序,因为是倒序,所以read_last为1,read_prev为2.因为往回读了两个key.

  1. ALTER TABLE test ADD COLUMN file_sort text;
  2. UPDATE test SET file_sort = 'abcdefghijklmnopqrstuvwxyz' WHERE id = 1;
  3. UPDATE test SET file_sort = 'bcdefghijklmnopqrstuvwxyza' WHERE id = 2;
  4. UPDATE test SET file_sort = 'cdefghijklmnopqrstuvwxyzab' WHERE id = 3;
  5. UPDATE test SET file_sort = 'defghijklmnopqrstuvwxyzabc' WHERE id = 4;
  6. UPDATE test SET file_sort = 'efghijklmnopqrstuvwxyzabcd' WHERE id = 5;
  7. UPDATE test SET file_sort = 'fghijklmnopqrstuvwxyzabcde' WHERE id = 6;
  8. UPDATE test SET file_sort = 'ghijklmnopqrstuvwxyzabcdef' WHERE id = 7;
  9. UPDATE test SET file_sort = 'hijklmnopqrstuvwxyzabcdefg' WHERE id = 8;
  10. UPDATE test SET file_sort = 'ijklmnopqrstuvwxyzabcdefgh' WHERE id = 9;
  11. UPDATE test SET file_sort = 'jklmnopqrstuvwxyzabcdefghi' WHERE id = 10;

Handler_read_rnd为4 说明没有使用索引
rnd_next为11说明扫描了所有的数据
但是read first和read key的数据,不能解释.不知道为什么会是这个数据
read key总是read_rnd+1

参考:
http://www.fromdual.com/mysql-handler-read-status-variables
http://hi.baidu.com/thinkinginlamp/item/8d038333c6b0674a3075a1d3

 

MySQL Handler变量解析的更多相关文章

  1. Mysql优化深度解析

    说起MySQL的查询优化,相信大家收藏了一堆奇技淫巧:不能使用SELECT *.不使用NULL字段.合理创建索引.为字段选择合适的数据类型..... 你是否真的理解这些优化技巧?是否理解其背后的工作原 ...

  2. MySQL Q&A 解析binlog的两个问题

    MySQL Q&A 解析binlog的两个问题 博客分类: MySQL mysqlbinlog字符集解析binlog格式 连续碰到两个同学问类似的问题,必须要记录一下. 问题:     一个作 ...

  3. Mysql 声明变量

    Mysql 声明变量 Mysql中声明变量有两种方式 第一种: set @num=1; 或set @num:=1; //这里要使用变量来保存数据,直接使用@num变量 第二种: select @num ...

  4. OS 系统下安装MySql 配置MySql环境变量

    学习Hive需要,闲话不说 本文的内容: 下载Mysql for Mac 下载Mysql Workbench 安装 Mysql 和 Mysql Workbench 配置Mysql在OS 系统上的环境变 ...

  5. mysql中变量赋值

    http://www.cnblogs.com/qixuejia/archive/2010/12/21/1913203.html sql server中变量要先申明后赋值: 局部变量用一个@标识,全局变 ...

  6. MySql 申明变量以及赋值

    sql server中变量要先申明后赋值: 局部变量用一个@标识,全局变量用两个@(常用的全局变量一般都是已经定义好的): 申明局部变量语法:declare @变量名 数据类型:例如:declare ...

  7. PHP入门基础(一)——标记风格、注释、表单获取、字符串类型、变量解析

    PHP标记风格: //XML风格//推荐的标记风格,可以在XML文档中使用 <?php echo '<p>XML Style</p>'; ?> //简短风格——需启 ...

  8. PHP字符串中的变量解析(+教你如何在PHP字符串中加入变量)

    定义字符串的时候,用单引号或者双引号都是可以的.我个人习惯是用双引号.在输出字符串的时候,若字符串中含有字符串变量,使用单引号和双引号则是有区别的.如下面程序: 1 2 3 4 5 6 7 8 < ...

  9. Mysql 的变量

    变量 MySQL是一门编程语言.所以存在变量.流程控制.函数.存储过程.触发器 MySQL分系统变量,与自定义变量 MySQL的某些功能是通过系统变量来实现的.例如:autocommit 查看系统变量 ...

随机推荐

  1. 怎么去掉Xcode工程中的某种类型的警告

    XCode警告   问题描述  在我们的项目中,通常使用了大量的第三方代码,这些代码可能很复杂,我们不敢改动他们,可是作者已经停止更新了,当sdk升级或者是编译器升级后,这些遗留的代码可能会出现许许多 ...

  2. something: 重构、正则、vim -- clwu

    项目需要做一个db table 操作的小工具. 从phpMyAdmin上拷贝了一些代码过来修改,但我有没有足够的时间把所有拷贝过来的代码都重构修改和测试完,于是希望后面接手的同事在需要修改这些代码时能 ...

  3. windows下执行build_native.sh报权限问题

    编辑build_native.sh 在前面加上 chmod 777 -R ./* 

  4. dom 拖拽回放

    <!doctype html> <html> <head> <meta charset="utf-8"> <title> ...

  5. CXF整合Spring发布WebService实例

    一.说明: 上一篇简单介绍了CXF以及如何使用CXF来发布一个简单的WebService服务,并且介绍了客户端的调用. 这一篇介绍如何使用CXF与spring在Web项目中来发布WebService服 ...

  6. 【全面完美方案】iPhone 4S WiFi变灰 DIY修复方式

    这是我在一位台湾网友usaretama发表的一篇帖子中看到的,原帖我发表在维维网 如果你有WiFi开关变灰不能切换.WiFi遇到搜不到AP或搜到了连不上,那您就要注意这篇了. 家人的 iPhone 4 ...

  7. NSString 截取字符串

    NSString字符串常用方法2010-09-06 14:18/******************************************************************** ...

  8. datagridview自动填充列头

    //填充datagridview dgv.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;

  9. XML文件的生成与读取

    从数据库生成: public static void ToXML(string tablename) { //获取数据 string sql = "select * from " ...

  10. HDU 4496 D-City (并查集)

    题意:给定一个图,问你每次删除一条边后有几个连通块. 析:水题,就是并查集的运用,倒着推. 代码如下: #include <cstdio> #include <string> ...