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