Oracle表壓縮

cow977發表於2011-03-14
Oracle壓縮資料的處理基於資料庫塊,其本質上是透過消除在資料庫塊中的重複資料來實現空間節約,具體方法如下:比較資料塊中包含的所有欄位或記錄,其中重複的資料只在位於資料塊開始部分的記號表(Symbol Table)中儲存一份,在其他行或欄位出現同樣的資料時,只記錄一個指向記號表中相關資料的指標。
 
建立壓縮表:
create table Name(
......
) compress;
alter table Name compress;
alter table Name nocompress;
 
物化檢視的壓縮:
create materialized view ViewName compress
as select ......;
alter materialized view ViewName compress;
 
分割槽表的壓縮:
create table Name (
......
) compress
partition by ......;
create table Name (
......
)
partition by ......(
partition PartName ...... compress,
partition PartName ...... compress,
partition PartName ......
);
 
在表空間級別上定義壓縮屬性:
create tablespace ...... default compress;
alter tablespace ...... compress / nocompress;
當壓縮屬性被定義在表空間上時,在其中建立表時,該特性將被表繼承,但表級別的壓縮屬性會覆蓋表空間的壓縮屬性。
 
檢視一個表是否為壓縮表:
select compression from user_table where table_name=TableName;
 
檢視一個表空間是否被壓縮:
select def_tab_compression from dba_tablespace where tablespace_name=TablespaceName;
 
檢視分割槽表各分割槽的壓縮屬性:
select table_name, partition_name, compression from user_tab_partitions  where table_name=TableName;
 
表壓縮的實現:
壓縮表的資料要能夠被壓縮,必須正確地使用批次裝載或插入:
1、在SQL * LOADER中使用直接路徑(direct path)裝載資料;
2、執行create table ... as select語句;
3、執行並行插入語句;
4、執行序列插入語句並且使用append提示。
 
alter table Name move compress / nocompress;
 
效能分析:
1、在批次裝載或插入資料的過程中,由於壓縮的同時進行,會引起CPU使用率提高,及導致裝載時間明顯增加。
2、對於普通的INSERT語句,由於沒有執行壓縮過程,效能幾乎沒有影響。
3、用DELETE語句刪除壓縮表的操作會比較快,主要是因為壓縮表中被壓縮行的資料比較小,相應的需要寫日誌的資料量也比較小。
4、更新壓縮的操作會比較慢,主要由於ORACLE對非壓縮表執行了一些最佳化。
5、在IO吞吐率受限制的系統執行大批次查詢,比如全表掃描,壓縮表將明顯提高查詢速度,主要由於壓縮後,查詢同樣的資料行只需要讀取更少的資料塊。

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

相關文章