從Oracle iR 開始ORACLE提供了表/表空間壓縮技術以減少磁盤開銷節省空間並在某些情況下提高查詢性能
表壓縮是如何工作的在Orclei第版中表壓縮特性通過刪除在數據庫表中發現的重復數據值來節省空間壓縮是在數據庫的數據塊級別上進行的當確定一個表要被壓縮後數據庫便在每一個數據庫數據塊中保留空間以便儲存在該數據塊中的多個位置上出現的數據的單一拷貝這一被保留的空間被稱作符號表(symbol table)被標識為要進行壓縮的數據只存儲在該符號表中而不是在數據庫行本身內當在一個數據庫行中出現被標識為要壓縮的數據時該行在該符號表中存儲一個指向相關數據的指針而不是數據本身節約空間是通過刪除表中數據值的冗余拷貝而實現的
表級別創建一個壓縮表創建表時使用COMPRESS關鍵字COMPRESS關鍵字指示Oracle數據庫盡可能以壓縮的格式存儲該表中的行
create table test compress as select * from dba_objects where =create table test (id numbername varchar()time date) compress修改現有表為壓縮表SQL> alter table test compress取消表的壓縮SQL> alter table test nocompress確定表是否被壓縮確定一個表是否使用了壓縮查詢user_tablescompression字段表明表是否被壓縮
表空間級別創建表壓縮空間create tablespace TEST datafile /export/home/oracle/orag/oradata/test/testdbf size M default compress與其他存儲參數類似COMPRESS屬性也具有一些繼承特性當在一個表空間中創建一個表時它從該表空間繼承COMPRESS屬性
使現有表空間轉換為壓縮表空間SQL> alter tablespace test default compressSQL> alter tablespace test default nocompress確定是否已經利用compress對一個表空間進行了定義可查詢user_tablespaces數據字典視圖並查看def_tab_compression列SQL> select tablespace_namedef_tab_compression from user_tablespaces
壓縮一個已經存在但並沒有壓縮的表使用alter table …… move compress使一個已存在但未壓縮的表轉換為壓縮表
SQL> alter table test move compress同樣也可以使用alter table…… move nocompress來解壓一個已經壓縮的表SQL> alter table test move nocompress壓縮表的性能開銷一個壓縮的表可以存儲在更少的數據塊中從而節省了儲存空間而使用更少的數據塊也意味著性能的提高 在一個I/O受到一定限制的環境中對一個壓縮的表進行查詢通常可以更快速地完成因為他們需要閱讀的數據庫數據塊要少得多
由此可以看出向壓縮表中加入數據的時間是正常表的倍多加載壓縮的表所需要的額外時間來自於在數據加載過程中所執行的壓縮操作
可以得出的結論是在很少改變的表上使用壓縮技術還是可以的表中數據經常變動的情況下盡量不要使用表壓縮它影響插入操作
From:http://tw.wingwit.com/Article/program/Oracle/201311/17071.html