通常我們可以使用 COMPRESS子句或COMPRESS BASIC子句來啟用表的基本壓縮特性(COMPRESS子句和COMPRESS BASIC子句的作用是相同的),從性能的角度來說,使用基本壓縮的主要優(yōu)勢在于,如果數(shù)據(jù)壓縮后再加載,接下來的任何 I/O操作都會使用更少的資源,因為在讀寫數(shù)據(jù)時需要訪問更少的數(shù)據(jù)塊。一般來說,存儲大量字符數(shù)據(jù)的表適合使用基本壓縮。Oracle的基本壓縮屬性對于正常的DML語句,例如INSERT、UPDATE、MERGE和DELETE沒有影響。如果你希望對所有DML語句起作用,那么就要考慮使用OLTP壓縮。COMPRESS FOR OLTP子句為所有DML操作啟用壓縮。OLTP壓縮并不會在數(shù)據(jù)插入或修改時馬上壓縮,而是在數(shù)據(jù)塊中的修改達(dá)到一定閾值時,成批次來進(jìn)行壓縮。當(dāng)達(dá)到閾值時,所有未壓縮的數(shù)據(jù)行將會同時進(jìn)行壓縮。需要進(jìn)行壓縮的閾值由一種內(nèi)部算法(你并不能控制)決定。
創(chuàng)新互聯(lián)公司成立以來不斷整合自身及行業(yè)資源、不斷突破觀念以使企業(yè)策略得到完善和成熟,建立了一套“以技術(shù)為基點,以客戶需求中心、市場為導(dǎo)向”的快速反應(yīng)體系。對公司的主營項目,如中高端企業(yè)網(wǎng)站企劃 / 設(shè)計、行業(yè) / 企業(yè)門戶設(shè)計推廣、行業(yè)門戶平臺運營、成都app軟件開發(fā)、移動網(wǎng)站建設(shè)、微信網(wǎng)站制作、軟件開發(fā)、成都棕樹電信機(jī)房等實行標(biāo)準(zhǔn)化操作,讓客戶可以直觀的預(yù)知到從創(chuàng)新互聯(lián)公司可以獲得的服務(wù)效果。
同樣也能夠在分區(qū)和表空間級別上指定基本壓縮。位于使用COMPRESS子句創(chuàng)建的表空間中的所有表,默認(rèn)都會啟用基本壓縮。
可以查詢相應(yīng)的DBA/ALL/USER_TABLES視圖的compression來驗證是否對一張表啟用了壓縮。查詢dba_tablespace視圖中的tab_compression和compress_for列檢查表空間是否啟用了壓縮。
創(chuàng)建壓縮表:
create table regs (reg_idnumber,reg_namevarchar2(2000))compress;
create table regs (reg_idnumber,reg_namevarchar2(2000))compress for oltp;
壓縮表(之后的數(shù)據(jù)啟用):
SQL> alter table regs_dss compress;
SQL> alter table regs compress for oltp;
壓縮表中已有數(shù)據(jù):
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;
解壓縮表中已有數(shù)據(jù):
SQL> alter table regs_dss move nocompress;
SQL> alter table regs_dss move nocompress for oltp;
創(chuàng)建壓縮表空間
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;
修改已有的表空間,設(shè)置其默認(rèn)的壓縮度:
SQL> alter tablespace comp_data default compress;
1) 創(chuàng)建測試表并插入數(shù)據(jù)
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) 使用表壓縮功能創(chuàng)建
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小了將近一半的數(shù)據(jù)量。