Oracle插入記錄的順序是否是讀取的順序?
通過一個簡單的實驗驗證:
SQL> create table t
( x int,
a char(2000) default 'x',
b char(2000) default 'x',
c char(2000) default 'x');
Table created.
SQL> insert into t (x) values ( 1 );
1 row created.
SQL> insert into t (x) values ( 2);
SQL> insert into t (x) values ( 3);
SQL> commit;
Commit complete.
SQL> select x, rownum, rowid from t;
X ROWNUM ROWID
---------- ---------- ------------------
3 1 AAAOXNAAHAAAAasAAA
1 2 AAAOXNAAHAAAAavAAA
2 3 AAAOXNAAHAAAAawAAA
SQL> delete from t where x = 2;
1 row deleted.
SQL> insert into t (x) values ( 4 );
4 3 AAAOXNAAHAAAAawAAA
insert into t (x) values ( 5);
5 2 AAAOXNAAHAAAAatAAA
1 3 AAAOXNAAHAAAAavAAA
4 4 AAAOXNAAHAAAAawAAA
SQL> insert into t (x) values ( 10);
10 3 AAAOXNAAHAAAAauAAA
1 4 AAAOXNAAHAAAAavAAA
4 5 AAAOXNAAHAAAAawAAA
可見Oracle讀取時按照記錄的ROWID預設升序排列的,Oracle是一種堆表(預設),堆的意思就是雜亂無章的,插入資料時是根據内部算法,找到可用的資料塊,一般出于效率的考慮,不采用原來的空間,用邏輯塊的新空間,讀取的順序與COMMIT也沒有直接關系,是以要排序,最好用ORDER BY。