位置: 编程技术 - 正文

MYSQL神秘的HANDLER命令与实现方法(mysql handshake)

发布时间:2024-02-26

推荐整理分享MYSQL神秘的HANDLER命令与实现方法(mysql handshake),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:mysql chm,mysql秘密,mysql mmm,mysql ha,mysql mmm,mysql handshake,mysqlmha,mysql秘密,内容如对您有帮助,希望把文章链接给更多的朋友!

MySQL“自古以来”都有一个神秘的HANDLER命令,而此命令非SQL标准语法,可以降低优化器对于SQL语句的解析与优化开销,从而提升查询性能。看到这里,可能有小伙伴不淡定了,这么好的东西为啥没广泛使用呢?这不是与几年前很夯的handlersocket插件类似吗?

那么,我们先来看看Handler语法说明:

HANDLER tbl_name OPEN [ [AS] alias]HANDLER tbl_name READ index_name { = | <= | >= | < | > } (value1,value2,…) [ WHERE where_condition ] [LIMIT … ]HANDLER tbl_name READ index_name { FIRST | NEXT | PREV | LAST } [ WHERE where_condition ] [LIMIT … ]HANDLER tbl_name READ { FIRST | NEXT } [ WHERE where_condition ] [LIMIT … ]HANDLER tbl_name CLOSE

首先从语法上看,HANDLER可以通过指定的索引去访问数据。但此语法并不支持DML操作。此外,由于减少了SQL解析,Handler命令的性能真的非常不错,根据Inside君的简单主键测试,Handler命令比SQL要快%~%。测试脚本如下:

在Inside君的C的测试服务器上,线程主键查询跑到了近W QPS,还是非常令人印象深刻的。对比SQL的SELECT查询,整体测试结果如下图所示:

MYSQL神秘的HANDLER命令与实现方法(mysql handshake)

命令HANDLER的主要实现在源码sql_handler.h、sql_handler.cc,设个断点就能观察到具体的流程。MySQL上层及InnoDB存储引擎层主要实现函数入口为:

既然性能不错,为什么在生产环境中并不见到命令HANDLER的使用呢?主要是因为HANDLER命令存在以下几个主要问题:

非一致性读取???返回聚集索引中的所有列(即使是二级索引访问),而不能返回某个具体列二级索引不使用LIMIT关键字,只能返回1行记录知道命令HANDLER的同学,可能会认为HANDLER读取存在脏读问题。因为MySQL官方文档对于HANDLER读取的说明就是这么说的:

The handler interface does not have to provide a consistent look of the data (for example, dirty reads are permitted), so the storage engine can use optimizations that SELECT does not normally permit.然而需要特别注意的是,MySQL文档中准确的说法是可以允许提供不一致的读取。但InnoDB存储引擎的HANDLER实现是支持一致性读取的,Inside君亲测的确不存在脏读问题。当然,源码说明一切,可以发现在函数init_table_handle_for_HANDLER会对READVIEW进行分配,而注释也说明了这点:

/* We let HANDLER always to do the reads as consistent reads, evenif the trx isolation level would have been specified as SERIALIZABLE */m_prebuilt->select_lock_type = LOCK_NONE;m_prebuilt->stored_select_lock_type = LOCK_NONE;

貌似用HANDLER命令来做主键的查询是不错的,减少了SQL解析器的开销,性能提升杠杠的。但为此,应用要付出巨大的改动,而SQL最大的优势就在于标准化。相信这也是目前NoSQL数据库遇到的最大的一个问题。比如MongoDB,Inside君每次写查询时都要打开官方的命令对照表……

全面解析Windows下安装 mysql5.7的方法 关于在windows下安装mysql5.7要注意的新坑:5.7版本安装后ROOT账号是有默认的密码的,这个密码在windows下可以在mysql.ini配置文件指定的data文件夹下面,那

MySQL索引用法实例分析 本文实例分析了MySQL索引用法。分享给大家供大家参考,具体如下:MYSQL描述:一个文章库,里面有两个表:category和article。category里面有条分类数据。

MySQL数据库优化技术之配置技巧总结 本文实例讲述了MySQL数据库优化技术的配置方法。分享给大家供大家参考,具体如下:(一)减少数据库访问对于可以静态化的页面,尽可能静态化对一个

标签: mysql handshake

本文链接地址:https://www.jiuchutong.com/biancheng/347926.html 转载请保留说明!

上一篇:MySQL 5.6 & 5.7最优配置文件模板(my.ini)(mysql 5.6 5.7 性能)

下一篇:全面解析Windows下安装 mysql5.7的方法(全面解析皮炎)

  • 小规模纳税人不动产租赁税率
  • 小规模纳税人需要做进项税吗
  • 事业单位人员租房有补助吗
  • 报销 交通费
  • 用外购存货投资分录怎么写?
  • 自然人独资属于个体工商户吗?
  • 设备安装增值税适用税率
  • 小规模纳税人一个季度多少免税
  • 发票打印机的字偏上
  • 分公司交总公司管理费怎么做账
  • 个税计算方法举例讲解
  • 累计结转是什么意思
  • 软件技术开发是什么
  • 对研发机构采购国产设备,全额退还增值税
  • 汇算清缴后的会计分录
  • 公司向股东借款合法吗
  • js map foreach遍历
  • vue-router跳转
  • 无形资产研发成功后的支出
  • 出口退税需要满足什么条件外贸
  • 小程序怎么自定义tabbar
  • 数字孪生demo
  • php面向对象的三大特性
  • php获取路径和目录的方法
  • 一般纳税人收到小规模专票怎么抵扣
  • 购车的进项税怎么抵扣
  • 罚款支出计入什么
  • 数学建模三个人谁最难
  • 复制/root/install.log到/tmp
  • source命令怎么用
  • unix命令大全详解
  • php中为什么图片显示不出来
  • 企业职工生活费
  • phpcms v9官网
  • 职工薪酬在利润表哪里看
  • 减免税款的会计分录当月做吗
  • 无偿提供建筑服务账务处理
  • 总账和明细账期间相同吗
  • 长期股权投资收益要交企业所得税吗
  • sh sqlplus
  • sqlalchemy 封装
  • 固定资产加速折旧计算方法
  • 包装的设计要遵循哪些要求?
  • 应收账款资金占用费怎么算
  • 金融企业应当按照交易或事项的实质和经济现实
  • 当月的进项税可以不认证吗?
  • 补交进项转出的税分录
  • 存货期末计提减值准备影响当期所得税费用
  • 公司广告制作费用申请报告
  • 装修属于营业费用还是管理费用
  • 工程保险费属于二类费
  • 技术服务费怎么做分录
  • 购买汽车后,需要缴纳的税种有哪些
  • 税金及附加如何记账
  • 税务人员如何做好本职工作
  • 产品成本核算的原则是
  • sql中的where in
  • SQL函数substr使用简介
  • win10系统设置快捷键
  • ubuntu搜索已安装软件
  • win 8系统怎么样
  • win 7系统双独立显卡设置
  • 语音聊天能不能调出来
  • [置顶] 此外,车牌号:458143(懂得都懂[吃瓜])
  • 横版格斗rpg手游
  • cocos2d游戏源码
  • jquery的实现原理
  • Bullet(Cocos2dx)之增加调试绘制PhysicsDraw3D
  • eevee引擎
  • js querySelector() 使用方法
  • python给定某数字a
  • js文本框只能输入字母
  • 2000元工资交多少党费
  • 发票换领
  • 电子税务局登录不上,显示用户名不匹配
  • 税务稽查人员工作总结
  • 土地增值税网上申报流程
  • 纳税人信用信息
  • 租房协议中怎样签字
  • 异辛烷征收消费税2023
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号