壓縮表

通常我們可以使用 COMPRESS子句或COMPRESS BASIC子句來啓用表的基本壓縮特性(COMPRESS子句和COMPRESS BASIC子句的作用是相同的),從性能的角度來說,使用基本壓縮的主要優勢在於,如果數據壓縮後再加載,接下來的任何 I/O操作都會使用更少的資源,因爲在讀寫數據時需要訪問更少的數據塊。一般來說,存儲大量字符數據的表適合使用基本壓縮。Oracle的基本壓縮屬性對於正常的DML語句,例如INSERTUPDATEMERGEDELETE沒有影響。如果你希望對所有DML語句起作用,那麼就要考慮使用OLTP壓縮。COMPRESS FOR OLTP子句爲所有DML操作啓用壓縮。OLTP壓縮並不會在數據插入或修改時馬上壓縮,而是在數據塊中的修改達到一定閾值時,成批次來進行壓縮。當達到閾值時,所有未壓縮的數據行將會同時進行壓縮。需要進行壓縮的閾值由一種內部算法(你並不能控制)決定。

同樣也能夠在分區和表空間級別上指定基本壓縮。位於使用COMPRESS子句創建的表空間中的所有表,默認都會啓用基本壓縮。

可以查詢相應的DBA/ALL/USER_TABLES視圖的compression來驗證是否對一張表啓用了壓縮。查詢dba_tablespace視圖中的tab_compressioncompress_for列檢查表空間是否啓用了壓縮。

創建壓縮表:

create table regs (reg_id number,reg_name varchar2(2000))compress;

create table regs (reg_id number,reg_name varchar2(2000))compress for oltp;

壓縮表(之後的數據啓用):

SQL> alter table regs_dss compress;

    SQL> alter table regs compress for oltp;


壓縮表中已有數據:

SQL> alter table regs_dss move compress;

SQL> alter table regs_dss move compress for oltp;

 

解壓縮:

SQL> alter table regs_dss nocompress;

SQL> alter table regs_dss nocompress for oltp;


解壓縮表中已有數據:

SQL> alter table regs_dss move nocompress;

SQL> alter table regs_dss move nocompress for oltp;


創建壓縮表空間

CREATE TABLESPACE comp_data

DATAFILE 1/oraOl/dbf Ile/0liR2/comp_dataOl.dbf'

SIZE 500M

EXTENT MANAGEMENT LOCAL

UNIFORM SIZE 512K

SEGMENT SPACE MANAGEMENT AUTO

DEFAULT COMPRESS;/ DEFAULT COMPRESS for oltp;

修改已有的表空間,設置其默認的壓縮度:

SQL> alter tablespace comp_data default compress;

1)         創建測試表並插入數據

SQL> CREATE TABLE t (ID NUMBER,addtime DATE,mark varchar2(10) default null);

 

SQL> BEGIN

   FOR i IN 1 .. 60000

   LOOP

      INSERT INTO t(id,addtime)

           VALUES (i, sysdate);

      COMMIT;

      ---DBMS_LOCK.sleep (0.1);

   END LOOP;

END;

/

2)         查看對象大小

SQL> select segment_name, bytes/1024/1024 from dba_segments where owner='ADMIN';

 

SEGMENT_NAME              BYTES/1024/1024

------------------------- ---------------

CHAINED_ROWS                  .0625

T                                    5.8125

 

3)         使用表壓縮功能創建

SQL> create table t_com compress as select * from t;

SQL> select segment_name, bytes/1024/1024 from dba_segments where owner='ADMIN';

 

SEGMENT_NAME              BYTES/1024/1024

------------------------- ---------------

T_COM                         3

CHAINED_ROWS                  .0625

T                               5.8125

t_com啓用壓縮後比t小了將近一半的數據量。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章