概述

MySQL“自古以来”都有一个神秘的HANDLER命令,而此命令非SQL标准语法,可以降低优化器对于SQL语句的解析与优化开销,从而提升查询性能。


一、Handler参数列表

 mysql> show global status like 'Handle%';

参数介绍如下:


二、实际优化中比较看重的几个参数

1、Handler_read_first和Handler_read_rnd_next

前者表示全索引扫描的次数,当前者值较大,说明可能是一个全索引扫描,此外走全表也可能导致这个值比较大;后者表示在进行数据文件扫描时,从数据文件里取数据的次数。当后者值较大,说明扫描的行非常多,可能没有合理的使用索引

2、Handler_read_key

这个表示走索引的次数,如果这个值比较大,说明索引使用良好


三、实验演示

1、准备数据

CREATE TABLE test ( id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, DATA VARCHAR ( 32 ), ts TIMESTAMP, INDEX ( DATA ) );INSERT INTO testVALUES( NULL, 'abc', NOW( ) ),( NULL, 'abc', NOW( ) ),( NULL, 'abd', NOW( ) ),( NULL, 'acd', NOW( ) ),( NULL, 'def', NOW( ) ),( NULL, 'pqr', NOW( ) ),( NULL, 'stu', NOW( ) ),( NULL, 'vwx', NOW( ) ),( NULL, 'yza', NOW( ) ),( NULL, 'def', NOW( ) )

2、limit 2观察Handler_read_first、Handler_read_rnd_next、Handler_read_key

FLUSH STATUS;select * from test limit 2;SHOW SESSION STATUS LIKE 'handler_read%';explain select * from test limit 2;

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

3、索引消除排序(升序),只走索引

FLUSH STATUS;select data from test order by data limit 4;SHOW SESSION STATUS LIKE 'handler_read%';explain select data from test order by data limit 4;

使用索引消除排序,因为是升序,所以read first为1,由于limit 4,所以read_next为3,因为只从索引拿,不从数据文件里取数据所以rnd_next为0,索引通过这个可以看出Stop Key.

4、索引消除排序(倒序)

FLUSH STATUS;select data from test order by data desc limit 3;SHOW SESSION STATUS LIKE 'handler_read%';explain select data from test order by data desc limit 3;

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

5、没有使用索引

ALTER TABLE test ADD COLUMN file_sort text;UPDATE test SET file_sort = 'abcdefghijklmnopqrstuvwxyz' WHERE id = 1;UPDATE test SET file_sort = 'bcdefghijklmnopqrstuvwxyza' WHERE id = 2;UPDATE test SET file_sort = 'cdefghijklmnopqrstuvwxyzab' WHERE id = 3;UPDATE test SET file_sort = 'defghijklmnopqrstuvwxyzabc' WHERE id = 4;UPDATE test SET file_sort = 'efghijklmnopqrstuvwxyzabcd' WHERE id = 5;UPDATE test SET file_sort = 'fghijklmnopqrstuvwxyzabcde' WHERE id = 6;UPDATE test SET file_sort = 'ghijklmnopqrstuvwxyzabcdef' WHERE id = 7;UPDATE test SET file_sort = 'hijklmnopqrstuvwxyzabcdefg' WHERE id = 8;UPDATE test SET file_sort = 'ijklmnopqrstuvwxyzabcdefgh' WHERE id = 9;UPDATE test SET file_sort = 'jklmnopqrstuvwxyzabcdefghi' WHERE id = 10;FLUSH STATUS;select * from test order by file_sort limit 4;SHOW SESSION STATUS LIKE 'handler_read%';explain select * from test order by file_sort limit 4;

Handler_read_rnd为4 说明没有使用索引,rnd_next为11说明扫描了所有的数据,read key总是read_rnd+1。


觉得有用的朋友多帮忙转发哦!后面会分享更多devops和DBA方面的内容,感兴趣的朋友可以关注下~

mysql 升序_MySQL“自古以来”都有一个神秘的HANDLER命令相关推荐

  1. mysql 升序_MySQL之排序检索数据

    获取数据: 深大享:MySQL之数据准备​zhuanlan.zhihu.com 排序检索数据: 如何使用SELECT语句的ORDER BY子句,根据需要排序检索出的数据. 1.未排序检索数据 -- 未 ...

  2. mysql 升序_mysql 的 查找 与 排序

    mysql 的 查找 : SELECT name,age FROM mytable; # 在mytable 中所有的name,age 数据 SELECT name,age FROM mytable W ...

  3. golang mysql 插入_Mysql学习(一)添加一个新的用户并用golang操作Mysql

    Mysql添加一个新的用户并赋予权限 添加一个自己的用户到mysql 首先我们需要先用root用户登录mysql,但是刚安装完没有密码,我们先跳过密码 ailumiyana@ailumiyana:~/ ...

  4. mysql数据字典的通俗理解_MySQL关于数据字典的一个疑问

    今天看着MySQL的数据字典,突然想到一个问题:为什么MySQL数据字典 information_schema中的表名是大写,而performance_schema和其他库中的是小写? 带着这个问题, ...

  5. Mysql中的升序和降序以及一个字段升序和一个字段降序

    [Mysql中的升序和降序以及一个字段升序和一个字段降序](https://www.wuhaiqiao.com/2020/304.html)

  6. mysql索引_MySQL索引介绍和实战

    索引是什么 MySQL官方对索引的定义为:索引(Index)是帮助MySQL高效获取数据的数据结构. 可以得到索引的本质:索引是数据结构,索引的目的是提高查询效率,可以类比英语新华字典,根据目录定位词 ...

  7. mysql谓词演算_MySQL基础知识

    一.了解MySQL 1.什么是数据库? 数据库是一种以某种有组织的方式存储的数据集合. 2.模式(schema):关于数据库和表的布局及特性的信息. 3.列:正确的将数据分解为多个列极为重要.通过把它 ...

  8. mysql存储过程更新数据后返回一个字段_史上最全存储引擎、索引使用及SQL优化的实践...

    整个MySQL Server由以下组成 : Connection Pool :连接池组件 Management Services & Utilities :管理服务和工具组件 SQL Inte ...

  9. MySQL学习笔记(B站网课:MySQL_基础+高级篇- 数据库 -sql -mysql教程_mysql视频_mysql入门_尚硅谷)已完结

    目录 一.为什么要学习数据库 二.数据库的相关概念 三.数据库存储数据的特点 四.初始MySQL MySQL产品的介绍和安装 MySQL服务的启动和停止 MySQL服务的登录和退出 MySQL的常见命 ...

最新文章

  1. php 指定表格字体大小_PHPExcel根据单元格值设置字体/背景颜色
  2. 阿里飞天大数据飞天AI平台“双生”系统正式发布,9大全新数据产品集中亮相
  3. 架构整洁之道学习笔记
  4. android系统性能优化---(9)Android 绿色应用公约
  5. Java多线程-join方法
  6. Yii2修改默认控制器
  7. visual studio编Java,如何用Visual Studio编译Java源代码
  8. img图片在父元素中居中的方法
  9. GLUE数据集免费下载 (MNLI, QQP, QNLI, SST-2, CoLA, STS-B, MRPC, RTE, WNLI)
  10. 非服务器模式下运行getImageData函数出现 the operation is insecure
  11. LeNet识别眼疾iChallenge-PM
  12. 计算机开机弹出的今日热点怎么关闭
  13. excel打不开_excel表格中超链接打不开的解决办法
  14. OpenCV+Python 彩色图片的 BGR、灰度图、HSV分量图显示的程序
  15. 不知道ai绘画如何使用?这几个ai绘画软件推荐给你
  16. [渝粤教育] 中央财经大学 人力资源管理 参考 资料
  17. Echarts图表中设置背景图片
  18. java面试题2021
  19. 使用showdoc快速生成在线文档
  20. 关于极限lim n阶乘/n^n的若干解法(1)

热门文章

  1. 特斯拉计划在2023年推出2.5万美元电动汽车,或无方向盘
  2. 小米MIX 4内部代号曝光:“众神之王”三季度降临
  3. 100家店干翻17000家药店!刘强东最恐惧的对手来了!
  4. 小米11顶配版屏幕参数曝光:2K 120Hz高刷屏支持运动补偿
  5. 90万餐饮商家全店五折 支付宝首次以数字生活平台身份参加双11
  6. Realme真我X7系列首发骁龙860? 副总裁辟谣:大家散了吧
  7. 华为Mate 40 Pro正面细节曝光:3D人脸识别+双孔曲面屏
  8. 电影院今日复业!20部影片上映,票房预售超百万
  9. 外媒:柔宇科技搁置赴美上市计划 考虑在中国进行IPO
  10. 瑞幸咖啡:陆正耀继续担任董事和董事长