银行

使用db2dart探究select返回结果的顺序

由于使用row_number() over()过程中不清楚数据输出的顺序是如何决定的,怀疑在select语句输出的时候,如果不使用order by等排序语句,那么db2将按照数据页中的顺序显示查询结果,特使用db2dart工具来验证一下此猜测。创建一个新数据库create database testdb;(db2dart需要断开所...显示全部
由于使用row_number() over()过程中不清楚数据输出的顺序是如何决定的,怀疑在select语句输出的时候,如果不使用order by等排序语句,那么db2将按照数据页中的顺序显示查询结果,特使用db2dart
工具来验证一下此猜测。
创建一个新数据库create database testdb;(db2dart需要断开所有连接)
创建表create table test(id varchar(10));
查看表空间id:db2 list tablespaces
查看表id:select tableid from syscat.tables where tabname='TEST'
断开连接db2 terminate
db2dart CPHAPP /DD /TSI 2 /OI 4 /PS 0 /NP 100 /V Y /RPTN DB2INST1.TEST (/DD:提取格式化的表数据;/TSI 用于指定表空间 ID(tablespace ID);/OI 用于指定对象 ID(object ID);
/PS 用于指定开始的数据页;/NP 用于指定所要提取的数据页的数量;/V 用于设定是否显示详细信息,Y:显示,N:不显示;/RPTN 指定用来保存结果的文件名。)
查看db2inst1.test文件,前4个slot是头文件不管
插入记录insert into test values('0'),('1'),('2'),('3'),('4'),('5'),('6')
db2 terminate
db2dart CPHAPP /DD /TSI 2 /OI 4 /PS 0 /NP 100 /V Y /RPTN DB2INST1.TEST
查看db2inst1.test文件,slot4到slot10依次是0到6
select * from db2inst1.test;
ID
------------
0
1
2
3
4
5
6

删除0,3,插入10,13
select * from db2inst1.test;
ID
------------
10
1
2
13
4
5
6

db2dart CPHAPP /DD /TSI 2 /OI 4 /PS 0 /NP 100 /V Y /RPTN DB2INST1.TEST
发现slot4从0变为10,slot7从3变为13

结论:select返回的结果是按照数据页中的顺序展现的,如果发生删除操作后再进行插入,那么新插入的数据或许会补入被删除数据的位置,从而在select返回结果集时新插入的数据不会显示在末尾而是显示在前面位置。收起
参与12

查看其它 5 个回答fengsh的回答

fengshfengsh系统工程师电信行业
不错!
支持原创,自研!
系统集成 · 2012-05-04
浏览1003

回答者

fengsh
系统工程师电信行业
擅长领域: 云计算容器数据库

fengsh 最近回答过的问题

回答状态

  • 发布时间:2012-05-04
  • 关注会员:2 人
  • 回答浏览:1003
  • X社区推广