Oracle 堆組織表(HOT)

oracle_ace發表於2008-04-06

Oracle實際應用中,經常會用到table,對於table的研究自己之前並沒有過多的參與, 最近讀了一下tom的書後,對table又有了一點新的認識.
table在Oracle中被分為很多的類種,我們平時在create table時,最常用到的型別就是堆組織表了(HOT),那麼heap我們都知道是一種經典的資料結構,是一塊磁碟或記憶體的空間,那麼在應用上是按照一種顯示隨機的方式進行管理的,由於這樣的特性致使使用者可能不能按照表中插入的順序來獲得表中的資料,除非在表中增加一個可以order by排序的列,那麼在獲取資料的時候才有可能按照insert的順序來獲取. 其實可以用一句話來形容堆組織表就是對於表中的block,只要是能夠儲存資料,那麼就會把新資料存放在可用空間裡面而可能完全忽略了實際insert的順序.因此在做FTS時,oracle會按照實際命中行的順序來獲取資料,而不是按照insert的順序.所以我們可以說HOT表是一種無序的資料集合:

下面看一個小實驗:
SQL> select * from v$version;

BANNER
----------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - 64bi
PL/SQL Release 10.2.0.3.0 - Production
CORE    10.2.0.3.0      Production
TNS for IBM/AIX RISC System/6000: Version 10.2.0.3.0 - Productio
NLSRTL Version 10.2.0.3.0 - Production

SQL> show parameter db_block_size;

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

SQL> create table t
  2  (a int,
  3   b varchar2(4000) default rpad('*',4000,'*'),
  4   c varchar2(3000) default rpad('*',3000,'*')
  5  );

Table created.

--對於預設的create table方式生成的表型別是HOT.

SQL> insert into t(a) values(1);

1 row created.

SQL> insert into t(a) values(2);

1 row created.

SQL> insert into t(a) values(3);

1 row created.

SQL> select a from t;

         A
----------
         1
         2
         3

SQL> delete from t where a=2;

1 row deleted.

SQL> select a from t;

         A
----------
         1
         3

SQL> insert into t(a) values(4);

1 row created.

SQL> select a from t;

         A
----------
         1
         4
         3

另外在create table時相對於堆組織表來說有一些引數可以供我們參考:
對於ASSM有兩個重要選項,對於MSSM有四個重要選項:
Freelist:僅適用於MSSM,對於ASSM由於已經使用三級點陣圖的方式來管理segment,因此不適用於ASSM
PCTFREE: ASSM和MSSm都適用,表示為一個block中已存在的行在將來更新時預留出的一段空間.
PCTUSED: 僅適用於MSSM,當塊中的空閒程度>(1-PCTUSED)時候,這個block將會重新回到freelist上來.
INITRANS: ASSM和MSSM都適用,表示為block分配的初始slot數目.預設是2,每一個slot佔據的空間是23-24個位元組

這裡還需要強調的是,單獨儲存在LOB Segment中的資料是不使用PCTFREE/PCTUSED這些引數的.而是以另外一種方式來進行管理.

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12361284/viewspace-230932/,如需轉載,請註明出處,否則將追究法律責任。

相關文章