银行

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

由于使用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

6同行回答

jayciededejayciedede技术经理安图特(北京)科技有限公司
精神可嘉:lol显示全部
精神可嘉:lol收起
互联网服务 · 2012-05-04
浏览954
fengshfengsh系统工程师电信行业
不错!支持原创,自研!显示全部
不错!
支持原创,自研!收起
系统集成 · 2012-05-04
浏览1026
jimmyjimmy数据仓库工程师招行软件中心
好文章显示全部
好文章收起
银行 · 2012-05-03
浏览994
wp28556259wp28556259软件架构设计师CMBC
不错哦,学习了显示全部
不错哦,学习了收起
银行 · 2012-05-03
浏览963
shadowflareshadowflare软件开发工程师交通银行
从记录的rid就可以判断了,用不到db2dartSELECT rid()fromtest_trid()越小的越早返回显示全部

从记录的rid就可以判断了,用不到db2dart

SELECT

rid()

from

test_t

rid()越小的越早返回

收起
银行 · 2016-01-16
浏览992
dezai1223dezai1223系统运维工程师浪潮
学习了。显示全部
学习了。收起
系统集成 · 2015-08-20
浏览1015

提问者

paulxie
数据库管理员CMBC
擅长领域: 数据库存储服务器

问题状态

  • 发布时间:2012-05-03
  • 关注会员:2 人
  • 问题浏览:6749
  • 最近回答:2016-01-16
  • X社区推广