oracle 按照时间倒序_Oracle是否根据ROWID顺序读取记录(二)

前两天一个学习Oracle时间不长的同事问我,是否Oracle读取记录的时候是按照ROWID顺序的。虽然当时给他大致讲了讲,但是毕竟不是很直观,还是通过一个小例子来说明这个问题。

在做一个DATA OBJECT ID的例子。

上一篇文章中通过一个例子说明了Oracle读取表数据并非根据ROWID的顺序进行读取。例子采用了构造ROWID信息中BLOCK ID的方式进行了证明,Oracle返回表数据时,可能BLOCK ID小的记录反而稍后返回。

这一篇介绍构造DATA OBJECT ID的例子。

这个例子需要借助Oracle11g的INTERVAL分区表:

SQL> CREATE TABLE T_PART_INTERVAL

2  (ID NUMBER,

3  NAME VARCHAR2(30))

4  PARTITION BY RANGE (ID)

5  INTERVAL (1)

6  (PARTITION P1 VALUES LESS THAN (2));

表已创建。

对于这种INTERVAL的分区表,有一个特点,Oracle根据插入数据来自动创建所需的分区,也就是说并非分区列上限值小的分区一定先创建,这和普通的RANGE分区表是有区别的。具体的描述可以参考:

SQL> INSERT INTO T_PART_INTERVAL VALUES (1, 'A');

已创建1行。

SQL> INSERT INTO T_PART_INTERVAL VALUES (3, 'A');

已创建1行。

SQL> INSERT INTO T_PART_INTERVAL VALUES (2, 'A');

已创建1行。

SQL> COMMIT;

提交完成。

在插入数据的时候先插入3,后插入2,这样就会导致Oracle先创建RANGE上限值为4的分区,后创建上限值为3的分区。

SQL> SELECT ROWID, ID, NAME FROM T_PART_INTERVAL;

ROWID                      ID NAME

------------------ ---------- ----------------------------------------

AAAa4oAAFAAABd2AAA          1 A

AAAa4qAAFAAABeCAAA          2 A

AAAa4pAAFAAABd8AAA          3 A

Oracle仍然是根据RANGE的大小顺序读取分区,这样就导致了读取顺序了DATA OBJECT ID是不同的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值