本篇内容主要讲解“MySQL8.0倒序索引数据的数据排列方式是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“MySQL8.0倒序索引数据的数据排列方式是什么”吧!

一、准备数据

mysql>createtabletab_desc->(id1int,->id2int,->key(id1),->key(id2desc));QueryOK,0rowsaffected(1.29sec)mysql>select*fromtab_desc;+------+------+|id1|id2|+------+------+|1|1||2|2||3|3||4|4||5|5||6|6||7|7|+------+------+二、通过执行计划证明

这个比较简单我们使用using index type index 来访问索引发现他们确实是相反

mysql>descselectid2fromtab_desc;+----+-------------+----------+------------+-------+---------------+------+---------+------+------+----------+-------------+|id|select_type|table|partitions|type|possible_keys|key|key_len|ref|rows|filtered|Extra|+----+-------------+----------+------------+-------+---------------+------+---------+------+------+----------+-------------+|1|SIMPLE|tab_desc|NULL|index|NULL|id2|5|NULL|7|100.00|Usingindex|+----+-------------+----------+------------+-------+---------------+------+---------+------+------+----------+-------------+1rowinset,1warning(0.11sec)mysql>selectid2fromtab_desc;+------+|id2|+------+|7||6||5||4||3||2||1|+------+7rowsinset(0.00sec)mysql>descselectid1fromtab_desc;+----+-------------+----------+------------+-------+---------------+------+---------+------+------+----------+-------------+|id|select_type|table|partitions|type|possible_keys|key|key_len|ref|rows|filtered|Extra|+----+-------------+----------+------------+-------+---------------+------+---------+------+------+----------+-------------+|1|SIMPLE|tab_desc|NULL|index|NULL|id1|5|NULL|7|100.00|Usingindex|+----+-------------+----------+------------+-------+---------------+------+---------+------+------+----------+-------------+1rowinset,1warning(0.00sec)mysql>selectid1fromtab_desc;+------+|id1|+------+|1||2||3||4||5||6||7|+------+7rowsinset(0.00sec)三、通过工具证明执行 ./innblock tab_desc.ibd scan 16得到结果

===INDEX_ID:136level0totalblockis(1)block_no:4,level:0|*|===INDEX_ID:137level0totalblockis(1)block_no:5,level:0|*|===INDEX_ID:138level0totalblockis(1)block_no:6,level:0|*|通过INNODB_INDEXES可以看到这两个索引对应的ID确实是137/138

|136|GEN_CLUST_INDEX|1059|1|5|4|2|50||137|id1|1059|0|2|5|2|50||138|id2|1059|0|2|6|2|50|通过命令 ./innblock tab_desc.ibd 5 16和 ./innblock tab_desc.ibd 6 16可以获得他们的逻辑链表信息如下:

id1====Blocklistinfo====-----Totalusedrows:9usedrowslist(logic):(1)INFIMUMrecordoffset:99heapno:0n_owned1,delflag:Nminflag:0rectype:2(2)normalrecordoffset:126heapno:2n_owned0,delflag:Nminflag:0rectype:0(3)normalrecordoffset:142heapno:3n_owned0,delflag:Nminflag:0rectype:0(4)normalrecordoffset:158heapno:4n_owned0,delflag:Nminflag:0rectype:0(5)normalrecordoffset:174heapno:5n_owned0,delflag:Nminflag:0rectype:0(6)normalrecordoffset:190heapno:6n_owned0,delflag:Nminflag:0rectype:0(7)normalrecordoffset:206heapno:7n_owned0,delflag:Nminflag:0rectype:0(8)normalrecordoffset:222heapno:8n_owned0,delflag:Nminflag:0rectype:0(9)SUPREMUMrecordoffset:112heapno:1n_owned8,delflag:Nminflag:0rectype:3id2====Blocklistinfo====-----Totalusedrows:9usedrowslist(logic):(1)INFIMUMrecordoffset:99heapno:0n_owned1,delflag:Nminflag:0rectype:2(2)normalrecordoffset:222heapno:8n_owned0,delflag:Nminflag:0rectype:0(3)normalrecordoffset:206heapno:7n_owned0,delflag:Nminflag:0rectype:0(4)normalrecordoffset:190heapno:6n_owned0,delflag:Nminflag:0rectype:0(5)normalrecordoffset:174heapno:5n_owned0,delflag:Nminflag:0rectype:0(6)normalrecordoffset:158heapno:4n_owned0,delflag:Nminflag:0rectype:0(7)normalrecordoffset:142heapno:3n_owned0,delflag:Nminflag:0rectype:0(8)normalrecordoffset:126heapno:2n_owned0,delflag:Nminflag:0rectype:0(9)SUPREMUMrecordoffset:112heapno:1n_owned8,delflag:Nminflag:0rectype:3

我们可以看到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降序排列的。

到此,相信大家对“MySQL8.0倒序索引数据的数据排列方式是什么”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!