zoukankan      html  css  js  c++  java
  • 【Oracle】-【插入读取顺序】-插入读取之间的顺序关系

    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); 
    1 row created.

    SQL> insert into t (x) values ( 3); 
    1 row created.

    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> commit;
    Commit complete.

    SQL> select x, rownum, rowid from t; 
             X     ROWNUM ROWID
    ---------- ---------- ------------------
             3          1 AAAOXNAAHAAAAasAAA
             1          2 AAAOXNAAHAAAAavAAA

    SQL> insert into t (x) values ( 4 );
    1 row created.


    SQL> select x, rownum, rowid from t; 
             X     ROWNUM ROWID
    ---------- ---------- ------------------
             3          1 AAAOXNAAHAAAAasAAA
             1          2 AAAOXNAAHAAAAavAAA
             4          3 AAAOXNAAHAAAAawAAA

    insert into t (x) values ( 5);


    SQL> select x, rownum, rowid from t; 

             X     ROWNUM ROWID
    ---------- ---------- ------------------
             3          1 AAAOXNAAHAAAAasAAA
             5          2 AAAOXNAAHAAAAatAAA
             1          3 AAAOXNAAHAAAAavAAA
             4          4 AAAOXNAAHAAAAawAAA

    SQL> insert into t (x) values ( 10);
    1 row created.

    SQL> select x, rownum, rowid from t; 
             X     ROWNUM ROWID
    ---------- ---------- ------------------
             3          1 AAAOXNAAHAAAAasAAA
             5          2 AAAOXNAAHAAAAatAAA
            10          3 AAAOXNAAHAAAAauAAA
             1          4 AAAOXNAAHAAAAavAAA
             4          5 AAAOXNAAHAAAAawAAA


    可见Oracle读取时按照记录的ROWID默认升序排列的,Oracle是一种堆表(默认),堆的意思就是杂乱无章的,插入数据时是根据内部算法,找到可用的数据块,一般出于效率的考虑,不采用原来的空间,用逻辑块的新空间,读取的顺序与COMMIT也没有直接关系,所以要排序,最好用ORDER BY。

  • 相关阅读:
    八数码难题 (codevs 1225)题解
    小木棍 (codevs 3498)题解
    sliding windows (poj 2823) 题解
    集合删数 (vijos 1545) 题解
    合并果子 (codevs 1063) 题解
    等价表达式 (codevs 1107)题解
    生理周期 (poj 1006) 题解
    区间 (vijos 1439) 题解
    区间覆盖问题 题解
    种树 (codevs 1653) 题解
  • 原文地址:https://www.cnblogs.com/jiangu66/p/3233669.html
Copyright © 2011-2022 走看看