MySQL8.0:倒序索引数据的数据排列方式

我们知道普通索引数据的排列方式是从小到大的,而倒序索引应该是从大到小的,那么如何证明呢?
下面我们就来一窥物理文件的组织方式,我们用一个小索引就在一个块里面来证明。

一、准备数据
640?wx_fmt=png

二、通过执行计划证明
这个比较简单,我们使用using index type index 来访问索引,发现他们确实是相反。

640?wx_fmt=png

三、通过工具证明
执行 ./innblock tab_desc.ibd scan 16得到结果:
640?wx_fmt=png

通过INNODB_INDEXES可以看到这两个索引对应的ID确实是137/138
通过命令 ./innblock tab_desc.ibd 5 16和 ./innblock tab_desc.ibd 6 16可以获得他们的逻辑链表信息如下:

640?wx_fmt=png

我们可以看到ID1普通索引逻辑链表信息为:

INFIMUM ->126 ->142 ->158 .....->SUPREMUM
而我们的反向索引逻辑链表信息为:
INFIMUM ->222->206 ->190 .....->SUPREMUM

那么我们分别来解读下数据因为普通索引的数据域排列方式就是:数据+主键 而int代表的是4字节那么
id1的数据就是 (这里用到了一个自己的工具bcview方便观察,当然非要肉眼撸也是也可以的用hexdump):

第一行 126字节后的4字节为:80000001
current block:00000005--Offset:00126--cnt bytes:04--data is:80000001

第二行 142字节后的4个字节:80000002
current block:00000005--Offset:00142--cnt bytes:04--data is:80000002

第三行 158字节后的4个字节:80000003
current block:00000005--Offset:00158--cnt bytes:04--data is:80000003

第四行 174字节后的4个字节:80000004
current block:00000005--Offset:00174--cnt bytes:04--data is:80000004

后面的我就不查询了可以看到是从小到大的。

接下来我们分解下倒序索引的数据:

第一行 222字节后的4字节为: 80000007
current block:00000006--Offset:00222--cnt bytes:04--data is:80000007

第二行 206字节后的4个字节: 80000006
current block:00000006--Offset:00206--cnt bytes:04--data is:80000006

第三行 190字节后的4个字节: 80000005
current block:00000006--Offset:00190--cnt bytes:04--data is:80000005

第四行 174字节后的4个字节: 80000004
current block:00000006--Offset:00174--cnt bytes:04--data is:80000004

因此我们得到验证,对于倒序索引而言其数据是在INFIMUM和SUPREMUM降序排列的。

原文地址:https://blog.51cto.com/14523150/2436554

时间: 2024-11-05 20:35:54

MySQL8.0:倒序索引数据的数据排列方式的相关文章

每篇半小时1天入门MongoDB——4.MongoDB索引介绍及数据库命令操作

准备工作 继续连接到mongo C:\Users\zouqi>mongo MongoDB shell version: 3.0.7 connecting to: test 查看数据库和集合 > show dbs demo 0.078GB local 0.078GB myDatabase 0.078GB myTest 0.078GB > use myTest switched to db myTest > show collections persons system.indexes

开源 免费 java CMS - FreeCMS2.0 移动APP生成信息数据

项目地址:http://www.freeteam.cn/ 生成信息数据 生成当前管理站点下允许移动APP访问的栏目的信息页面. 从左侧管理菜单点击生成信息数据进入. 您可以选择需要生成的栏目,然后点击"生成信息数据"进行信息页数据的静态化. 如果您是此站点的总管理员,您也可以把"是否所有栏目"属性选择为是,点击"生成信息数据"完成对此站点所有栏目的信息页数据的静态化. 系统会在此站点目录/mobile/栏目id/info/YYYY/目录下生成以信

Mysql: 利用强制索引去掉重数据

数据库版本: [[email protected]mysqltest ~]# mysql -u root -p123456 Welcome to the MySQL monitor.  Commands end with ; or \g. Your MySQL connection id is 389805 Server version: 5.1.73-community MySQL Community Server (GPL) Copyright (c) 2000, 2013, Oracle

Hadoop2.0、YARN技术大数据视频教程

基于Hadoop2.0.YARN技术的大数据高阶应用实战(Hadoop2.0\YARN\MapReduce\数据挖掘\项目实战)课程分类:Hadoop适合人群:高级课时数量:81课时用到技术:基于协同过滤的推荐系统.基于HBase的爬虫调度库涉及项目:银行人民币查询系统.HBase编程实践及案例分析咨询qq:1840215592 课程内容简介本课程基于<基于Greenplum Hadoop分布式平台的大数据解决方案>Hadoop部分的基础课程来进行扩展延伸,主要内容分为以下四部分:一.对Had

利用sys.dm_db_index_physical_stats查看索引碎片等数据(转)

我们都知道,提高sql server的数据查询速度,最有效的方法,就是为表创建索引,而索引在对数据进行新增,删除,修改的时候,会产生索引碎片,索引碎片多了,就需要重新组织或重新生成索引,以达到索引的最大效率. 那么我们要如何知道索引的碎片大小呢?在sql server中,碎片的大小是使用碎片比来体现的,按msdn上面的说法,如果碎片比小于30%,我们可以重新组织索引,如果碎片比大于等于30%,我们可以选择重新生成索引. 那么我们在那里可以查看到碎片比呢?最简单的就是在microsoft sql 

.net2.0中的Json序列化数据

在.net3.0中序列化数据只需引用System.Web.Extensions.dll, 命名空间里引用了System.Web.Script.Serialization JavaScriptSerializer jss = new JavaScriptSerializer(); jss.Serialize(list);即可!! 但在2.0中没有System.Web.Extensions.dll,所以不能像在3.0里那样用了,我的方法是换一个序列化类,Json.Net支持.net 2.0,进入点击

开源 免费 java CMS - FreeCMS2.0 移动APP生成栏目数据

项目地址:http://www.freeteam.cn/ 生成栏目数据 生成当前管理站点下允许移动APP访问的栏目的栏目页面. 从左侧管理菜单点击生成栏目数据进入. 您可以选择需要生成的栏目,然后点击"生成所选栏目数据"进行栏目页数据的静态化. 如果您是此站点的总管理员,您也可以点击"生成此站点所有栏目数据"完成对此站点所有栏目页数据的静态化. 系统会在此站点目录下创建一个以栏目id为名字的文件夹用于存放此栏目的静态化页面. 可以设置生成前多少页,如设置只生成前10

开源 免费 java CMS - FreeCMS2.0 移动APP生成首页数据

项目地址:http://www.freeteam.cn/ 生成首页数据 提取当前管理站点下允许移动APP访问的首页数据,生成json数据到/site/站点目录/mobile/index_页数.html页面. 从左侧管理菜单点击生成首页数据进入. 点击确定即可. 开源 免费 java CMS - FreeCMS2.0 移动APP生成首页数据

VC++ 6.0 C8051F340 USB 通信 CAN 数据解析

// HelloWorld.cpp : Defines the entry point for the console application. // /***************************************************************************** * VC++ 6.0 C8051F340 USB 通信 CAN 数据解析 * 声明: * 1. 这是在<VC++ 6.0 C8051F340 USB PC侧通信 Demo>的基础上的代码: