表壓縮是如何工作的
在orcle9i第2版中,表壓縮特性通過刪除在資料庫表中發現的重複資料值來節省空間。壓縮是在資料庫的資料塊級別上進行的。當確定乙個表要被壓縮後,資料庫便在每乙個資料庫資料塊中保留空間,以便儲存在該資料塊中的多個位置上出現的資料的單一拷貝。這一被保留的空間被稱作符號表(symbol table)。被標識為要進行壓縮的資料只儲存在該符號表中,而不是在資料庫行本身內。當在乙個資料庫行中出現被標識為要壓縮的資料時,該行在該符號表中儲存乙個指向相關資料的指標,而不是資料本身。節約空間是通過刪除表中資料值的冗餘拷貝而實現的。
對於使用者或應用程式開發人員來說,表壓縮的效果是透明的。無論表是否被壓縮,開發人員訪問表的方式都是相同的,所以當你決定壓縮乙個表時,不需要修改sql查詢。表壓縮的設定通常由資料庫管理人員或設計人員進行配置,幾乎不需要開發人員或使用者參與。
1.表級別:
1.1 建立乙個壓縮表:
建立表時使用compress關鍵字,compress關鍵字指示oracle資料庫盡可能以壓縮的格式儲存該表中的行。
sql> create table tmp_test
(id number,phone varchar2(20),create_time date)
compress;
1.2 修改現有表為壓縮表:
sql> alter table tmp_test compress;
取消表的壓縮:
sql> alter table tmp_test nocompress;
1.3 確定表是否被壓縮:
確定乙個表是否使用了壓縮,查詢user_tables,compression欄位表明表是否被壓縮.
sql> select table_name,compression from user_tables where table_name not like 'bin%';
table_name compress
classes enabled
rooms enabled
students disabled
major_stats disabled
2.表空間級別:
2.1 建立表壓縮空間:
可以在表空間級別上定義compress屬性,既可以在生成時利用create tablespace來定義,也可以稍後時間利用alter tablespace來定義。
與其他儲存引數類似,compress屬性也具有一些繼承特性。當在乙個表空間中建立乙個表時,它從該錶空間繼承compress屬性。
可以在乙個表空間直接壓縮或解壓縮乙個表,而不用考慮表空間級別上的compress屬性。
2.2 使現有表空間轉換為壓縮表空間 sql> alter tablespace sms default compress;
sql> alter tablespace sms default nocompress;
2.3 確定是否已經利用compress對乙個表空間進行了定義,可查詢user_tablespaces資料字典檢視並檢視def_tab_compression列
sql> select tablespace_name,def_tab_compression from user_tablespaces;
tablespace def_tab_
users disabled
test disabled
undotbs01 disabled
statpack disabled
3.向乙個壓縮的表中載入資料
注:當像上面那樣指定compress時,其它表中(表空間)的資料並沒有壓縮,它只是修改了資料字典的設定;只有在向乙個表中加裁/插入資料時,才會壓縮資料.
只有在使用下面4種方法時,表中的資料才會被壓縮存放:
4.壓縮乙個已經存在但並未壓縮的表
使用alter table .. move compress使乙個已存在但未壓縮的表轉換為壓縮表.
sql> alter table tmp_test move compress;
同樣,也可以使用alter table.. move nocompress來解壓乙個已經壓縮的表:
sql> alter table tmp_test move nocompress;
5.壓縮乙個物化檢視
使用用於壓縮表的類似方式來壓縮物化檢視。
基於多個表的聯接生成的物化檢視通常很適於壓縮,因為它們通常擁有大量的重複資料項。
sql> create materialized view mv_tmp_test
compress
as select a.phone,b.create_time from tmp_test a,recv_stat b
where a.id=b.id;
可以使用alter materialized view命令來改變乙個物化檢視的壓縮屬性。
當你使用此命令時,請注意通常是在下一次重新整理該物化檢視時才會進行實際的壓縮。
sql> alter materialized view mv_temp_test compress;
6.壓縮乙個已分割槽的表
在對已分割槽的表應用壓縮時,可以有很多種選擇。你可以在表級別上應用壓縮,也可以在分割槽級別上應用壓縮。
你可以利用alter table ...move partition命令對此分割槽進行壓縮
sql> alter table tmp_test move partition create_200606 compress;
要找出乙個表中的哪些分割槽被壓縮了,可以查詢資料字典檢視user_tab_partitions
sql>select table_name, partition_name,compression from user_tab_partitions;
7.壓縮表的效能開銷
乙個壓縮的表可以儲存在更少的資料塊中,從而節省了儲存空間,而使用更少的資料塊也意味著效能的提高。 在乙個i/o受到一定限制的環境中對乙個壓縮的表進行查詢通常可以更快速地完成,因為他們需要閱讀的資料庫資料塊要少得多。
使用sql*load載入100萬資料:
表名行數
路徑是否是壓縮的
消耗的時間
test_nocom
1000000
直接非壓縮的
00:00:21.12
test_comp
1000000
直接壓縮的
00:00:47.77
由此可以看出,向壓縮表中加入資料的時間是正常表的一倍.載入壓縮的表所需要的額外時間來自於在資料載入過程中所執行的壓縮操作。
可以得出的結論是:在很少改變的表上使用壓縮技術還是可以的.表中資料經常變動的情況下,盡量不要使用表壓縮,它影響插入操作.
oracle壓縮表 表空間 轉
從oracle 9ir2 開始,oracle提供了表 表空間壓縮技術,以減少磁碟開銷,節省空間,並在某些情況下提高查詢效能。表壓縮是如何工作的在orcle9i第2版中,表壓縮特性通過刪除在資料庫表中發現的重複資料值來節省空間。壓縮是在資料庫的資料塊級別上進行的。當確定乙個表要被壓縮後,資料庫便在每乙...
oracle壓縮表空間
tablespace created.查詢表空間資訊 sys orcl selecttablespace name,compress for from dba tablespaces tablespace name compress for system sysaux undotbs1 temp u...
Oracle資料庫例項 使用者 表 表空間之間關係
資料庫 oracle資料庫是資料的物理儲存。這就包括 資料檔案ora或者dbf 控制檔案 聯機日誌 引數檔案 其實oracle資料庫的概念和其它資料庫不一樣,這裡的資料庫是乙個作業系統只有乙個庫。可以看作是oracle就只有乙個大資料庫。例項 乙個oracle例項 oracle instance 有...