ITPub博客

首页 > 数据库 > Oracle > 转: 关于oracle 是按照写入顺序还是ROWID顺序取数据

转: 关于oracle 是按照写入顺序还是ROWID顺序取数据

原创 Oracle 作者:jidongzheng 时间:2011-07-18 09:06:13 0 删除 编辑

答案是: ROWID顺序

以下是转的测试内容:

[@more@]

创建一个1M的表空间:

SQL> SHOW PARAMETER BLOCK_SIZE

NAME TYPE VALUE
------------------------------------ ----------- -----------------------
db_block_size integer 8192

SQL> CREATE TABLESPACE TEST DATAFILE 'E:ORACLEORADATAYTK102TEST01.DBF' SIZE 1M;

表空间已创建。

下面建立一张表占用数据文件的大部分空间:

SQL> CREATE TABLE T_TEST (ID NUMBER, NAME VARCHAR2(30)) TABLESPACE TEST
2 STORAGE (INITIAL 896K);

表已创建。

去掉数据文件的头信息,这个数据文件只有不到128k的可用空间了,下面创建目标表,为了方便,目标表包含了三个CHAR(2000)的字段,这样每条记录都会占用1个BLOCK,加上表头的三个BLOCK,这张表最大只能插入5条记录:

SQL> CREATE TABLE T_TEST1 (ID NUMBER, C1 CHAR(2000), C2 CHAR(2000), C3 CHAR(2000))
2 TABLESPACE TEST STORAGE (INITIAL 64K);

表已创建。

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

已创建 1 行。

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

已创建 1 行。

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

已创建 1 行。

SQL> INSERT INTO T_TEST1 VALUES (4, 'A', 'A', 'A');

已创建 1 行。

SQL> INSERT INTO T_TEST1 VALUES (5, 'A', 'A', 'A');

已创建 1 行。

SQL> INSERT INTO T_TEST1 VALUES (6, 'A', 'A', 'A');
INSERT INTO T_TEST1 VALUES (6, 'A', 'A', 'A')
*
第 1 行出现错误:
ORA-01653:
表 YANGTK.T_TEST1 无法通过 8 (在表空间 TEST 中) 扩展

检查现在的读取顺序:

SQL> SELECT ID, ROWID FROM T_TEST1;

ID ROWID
---------- ------------------
3 AAAPFGAAJAAAAB8AAA
4 AAAPFGAAJAAAAB9AAA
5 AAAPFGAAJAAAAB+AAA
1 AAAPFGAAJAAAAB/AAA
2 AAAPFGAAJAAAACAAAA

可以看到,当前的读取顺序确实不是按照插入顺序进行的,而是根据ROWID的顺序进行的读取。

下面删除刚才建立的T_TEST,插入一条新的记录,再次检查读取顺序:

SQL> DROP TABLE T_TEST PURGE;

表已删除。

SQL> INSERT INTO T_TEST1 VALUES (6, 'A', 'A', 'A');

已创建 1 行。

SQL> SELECT ID, ROWID FROM T_TEST1;

ID ROWID
---------- ------------------
3 AAAPFGAAJAAAAB8AAA
4 AAAPFGAAJAAAAB9AAA
5 AAAPFGAAJAAAAB+AAA
1 AAAPFGAAJAAAAB/AAA
2 AAAPFGAAJAAAACAAAA
6 AAAPFGAAJAAAAAJAAA

已选择6行。

由于数据文件前面的BLOCK被释放,T_TEST1表新扩展的EXTENT的BLOCK_ID要小于原EXTENT的BLOCK_ID,因此ID为6的记录的ROWID明显比前面5条记录的ROWID要小,显然Oracle并不是根据ROWID大小顺序来读取记录的。不过同一个EXTENT中,Oracle是根据这个顺序来读取的。

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/197458/viewspace-1052643/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
  • 博文量
    152
  • 访问量
    724077