当前位置: 首页 > news >正文

深圳做律师网站公司/深圳网站优化平台

深圳做律师网站公司,深圳网站优化平台,wordpress 乱版,网络营销名词解释答案作者:高鹏(网名八怪),《深入理解MySQL主从原理32讲》系列的作者。系列链接:https://www.jianshu.com/nb/43148932一、问题来源二、源码部分三、实例解析1. 有符号2、无符号四、测试延伸阅读一、问题来源如果我们查看sh…

作者:高鹏(网名八怪),《深入理解MySQL主从原理32讲》系列的作者。
系列链接:https://www.jianshu.com/nb/43148932

一、问题来源二、源码部分三、实例解析1. 有符号2、无符号四、测试延伸阅读

一、问题来源

如果我们查看show egnine innodb查看锁记录的时候往往会看到Innodb的数字使用类似
80000001的形式显示如下:

Record lock, heap no 2 PHYSICAL RECORD: n_fields 4; compact format; info bits 00: len 1; hex 31; asc 1;;1: len 1; hex 31; asc 1;;2: len 1; hex 80; asc  ;;3: len 8; hex 8000000000000001; asc         ;;

这里是一个有符号的bigint的显示。本文就来说一下这个值是这么计算出来的。本文以4字节的int为例。

二、源码部分

关于转换的部分主要集中在函数 row_mysql_store_col_in_innobase_format 中,我们来看一下数字的转换代码如下:

if (type == DATA_INT) {/* Store integer data in Innobase in a big-endian format,sign bit negated if the data is a signed integer. In MySQL,integers are stored in a little-endian format. *///p指针指向buf的最高地址,反向获取数据得到大端buffer时byte*   p = buf + col_len; for (;;) {p--;*p = *mysql_data; //转大端 if (p == buf) { //如果存储完成 break;}mysql_data++;}if (!(dtype->prtype & DATA_UNSIGNED)) {//如果为有符号类型*buf ^= 128;}ptr = buf; //PTR指向 buffer低地址buf += col_len;//buf指向 buffer的高地址} 
...//存入dtuple中,里面很简单就是取void* 存进去进行了。
dfield_set_data(dfield, ptr, col_len);

这里的关键部分就是对于有 *buf ^= 128 这部分,实际上就是转换为大端后的最低位做一个异或操作。
最终操作为函数 page_cur_tuple_insert 会将这个dtuple插入到实际的数据文件其中有一个函数为 rec_convert_dtuple_to_rec_comp,会获得最终的物理记录,其中的代码memcpy(end, dfield_get_data(field), len),可以看到实际存入物理记录的就是这里的转换后的值。

三、实例解析

1. 有符号

正数:以数字5为例子,其4字节的表示方法为0x05 0x00 0x00 0x00,这里还是小端形式为MySQL层传入的值。Innodb转换方式如下:

  • 从高地址开始取,转换为大端形式,转换后为
    0x00 0x00 0x00 0x05

  • 如果为有符号类型转换为大端后的最低位做一个异或操,转换为
    0x80 0x00 0x00 0x05

负数:以数字-5为例子,其4字节的表示方法为0xfb 0xff 0xff 0xff(补码),这里还是小端形式为MySQL层传入的值。Innodb转换方式如下:

  • 从高地址开始取,转换为大端,转换后为
    0xff 0xff 0xff 0xfb

  • 如果为有符号类型转换为大端后的最低位做一个异或操,转换为
    0x7f 0xff 0xff 0xfb

2、无符号

这个比较简单,直接原始值大端输出即可,不做最后的异或操作。

四、测试

我们为了测试就建立一个表如下:

create table testint(id int primary key);
insert into testint values(5),(-5);

然后使用innblock和bcview查看二进制文件中存储的方式。

第一行记录为:

转换如下:

80000005 实际记录5
000000014224 trx id
bd000000230110 roll ptr

第二行记录为:


7ffffffb 实际记录-5
000000014224 trx id 
bd00000023011d roll ptr

我们可以发现我们的分析是正确,确实物理文件中也是这样存储的。

延伸阅读

  • InnoDB表聚集索引层高什么时候发生变化

  • 浅析InnoDB索引结构

  • Innodb页合并和页分裂

  • innblock | InnoDB page观察利器

  • jcole.us:The physical structure of InnoDB index pages

  • jcole.us:B+Tree index structures in InnoDB

Enjoy MySQL :)

全文完。


叶老师的「MySQL核心优化」大课已升级到MySQL 8.0,扫码开启MySQL 8.0修行之旅吧

http://www.lbrq.cn/news/1578799.html

相关文章:

  • 拼多多卖网站建设/googleplay官方下载
  • 国内漂亮网站欣赏/营销软文范例大全300
  • 西安网站注册/企业网站seo排名
  • wordpress新打开空白页/举例说明seo
  • 营销型网站建设论文/软考培训机构哪家好一点
  • 如何做自己网站/微博推广效果怎么样
  • 承接网站建设 优帮云/电商营销推广方案
  • 广告公司做网站的效果怎么样/网络营销优化培训
  • 手机网站轮播图/鹤壁seo公司
  • 威县做网站哪里便宜/郑州网站推广公司排名
  • 南山做网站方案/seo搜索优化是什么
  • app设计网站推荐/湖南百度推广
  • 什么网站可以做行测/百度官方平台
  • 平面设计师工资一般多少钱一个月/西安网站关键词优化推荐
  • 淘宝网站建设退款/做网络推广怎么收费
  • 关于动漫的网站建设/网络广告营销的特点
  • 网络推广和网站推广平台/seo搜索引擎优化薪酬
  • 自己做代购网站/网页设计是干嘛的
  • 本地网站asp iis/seo优
  • 网站图片一般分辨率做多大/最有效的推广方式
  • 临汾网站建设电话/如何做谷歌seo推广
  • 网站建设流程周期/重大军事新闻
  • 苏州相城区做网站/2022年新闻热点事件
  • 网站如何换空间/软文营销代理
  • 搜收录网/百度怎么优化关键词排名
  • 自己怎么做网站网页/今日热点新闻事件标题
  • 买虚机送网站建设/如何在外贸平台推广
  • 计算机专业网页制作/镇江搜索优化技巧
  • 个人网页案例/泰安seo培训
  • 岱山县网站建设/java培训机构
  • 微算法科技(NASDAQ:MLGO)开发经典增强量子优化算法(CBQOA):开创组合优化新时代
  • 地图可视化实践录:显示地理区域图
  • 高性能Web服务器
  • 【SpringBoot】持久层 sql 注入问题
  • Linux 路由子系统深度分析:框架、实现与代码路径
  • JVM相关(AI回答)