Oracle:行迁移和行链接

行链接发生在INSERT阶段数据块无法容纳过大数据时。

行迁移发生在UPDATE阶段时原数据块无法容纳增大的数据时。

区别:
    行连接是指一个行存储在多个块中的情况,因为一个该行的长度超过了一个块的可用空间大小。
    行迁移是指一个数据行不适合放入当前块而被重新定位到另一个块,但在原始块中保留一个指针,
原始块中的指针是必需的,因为索引的rowid项仍然指向原始位置.
    行连接通常与行的长度和oracle数据库块中的大小有关,而行迁移通常是当一个更新操作的长度
增加且又要保持该行在同一块中,而该块又缺少可用空间时产生的问题,oracle在决定行连接之前先试图进行行迁移。 
SQL> create     table   t1      (c1     varchar2(20));

表已创建。

SQL> begin for i in 1..1000 loop insert into t1 values(null); end loop; end;
  2  /

PL/SQL 过程已成功完成。

SQL> analyze    table   t1      compute statistics;

表已分析。

SQL> select     pct_free,pct_used,avg_row_len,chain_cnt from    user_tables
  2      where table_name='T1';

  PCT_FREE   PCT_USED AVG_ROW_LEN  CHAIN_CNT
---------- ---------- ----------- ----------
        10         40           3          0


//我们对表t1进行更新,使之发生行迁移。

SQL> update     t1      set     c1='orcl  is   my  name';

已更新1000行。

SQL> analyze    table   t1      compute statistics;//使用ANALYZE命令对表t1进行分析,以便验证该表是否发生了行迁移。

表已分析。

SQL> select     pct_free,pct_used,avg_row_len,chain_cnt from    user_tables
  2      where table_name='T1';

  PCT_FREE   PCT_USED AVG_ROW_LEN  CHAIN_CNT
---------- ---------- ----------- ----------
        10         40          28        884

SQL> select table_name,tablespace_name from user_tables where table_name='T1';

TABLE_NAME                     TABLESPACE_NAME
------------------------------ ------------------------------
T1                             SYSTEM

SQL> alter table t1 move tablespace  users;

表已更改。

SQL> select table_name,tablespace_name from user_tables where table_name='T1';

TABLE_NAME                     TABLESPACE_NAME
------------------------------ ------------------------------
T1                             USERS

SQL> analyze    table   t1      compute statistics;

表已分析。

SQL> select     pct_free,pct_used,avg_row_len,chain_cnt from    user_tables
  2      where table_name='T1';

  PCT_FREE   PCT_USED AVG_ROW_LEN  CHAIN_CNT
---------- ---------- ----------- ----------
        10                     23          0

SQL> drop table t1 purge;

表已删除。

 

你可能感兴趣的:(Oracle/)