oracle表压缩比,oracle的compress 特性介绍
oracle從9i r2開始推出了compress table的功能,compress table能提供良好的壓縮性能,十分適用于存儲歷史數據。的打算
compress table需要通過創建table時指定compress子句
SQL 9I>create table testcom3(a number) compress;
Table created.
需要通過批量導入數據才能實現compress
1.alter table move
2.create table as select?? --compress是可以的,從compressed表是無法ctas為nocompress
3.insert /*+ APPEND */
4.direct path sqlldr
下面來看一些例子
SQL 9I>create table test(a varchar2(10),b number);
Table created.
begin
for i in 1..1000 loop
insert into test values(to_char(mod(i,9)),i);
commit;
end loop;
end;
/
PL/SQL procedure successfully completed.
SQL 9I>create table testcom1 compress as select * from test order by a;
Table created.
SQL 9I>set serveroutput on
SQL 9I>exec show_space('TEST');
Unformatted Blocks .....................????????????? 32
FS1 Blocks (0-25)? .....................?????????????? 0
FS2 Blocks (25-50) .....................?????????????? 0
FS3 Blocks (50-75) .....................?????????????? 1
FS4 Blocks (75-100).....................????????????? 26
Full Blocks??????? .....................?????????????? 1
Total Blocks............................???????????? 128
Total Bytes.............................?????? 1,048,576
Total MBytes............................?????????????? 1
Unused Blocks...........................????????????? 64
Unused Bytes............................???????? 524,288
Last Used Ext FileId....................????????????? 11
Last Used Ext BlockId...................???????????? 904
Last Used Block.........................?????????????64
PL/SQL procedure successfully completed.
SQL 9I>exec show_space('TESTCOM1');
Unformatted Blocks .....................?????????????? 0
FS1 Blocks (0-25)? .....................?????????????? 0
FS2 Blocks (25-50) .....................?????????????? 0
FS3 Blocks (50-75) .....................?????????????? 0
FS4 Blocks (75-100).....................?????????????? 0
Full Blocks??????? .....................?????????????? 2
Total Blocks............................???????????? 128
Total Bytes.............................?????? 1,048,576
Total MBytes............................?????????????? 1
Unused Blocks...........................???????????? 122
Unused Bytes............................???????? 999,424
Last Used Ext FileId....................????????????? 11
Last Used Ext BlockId...................?????????? 1,032
Last Used Block.........................?????????????? 6
PL/SQL procedure successfully completed.
可以看到compress table提供了良好的壓縮比
另外創建compress table的時候還需要注意的是order by子句的功能
create table test2(a varchar2(10),b varchar2(10),c varchar2(10));
begin
for i in? 1000000000..1000100000 loop
insert into test2 values(i,'1',to_char(mod(i,100)));
commit;
end loop;
end;
/
create table testcom4 compress as select * from test2 order by c;
create table testcom5 compress as select * from test2;
SQL 9I>exec show_space('TEST2');
Unformatted Blocks .....................?????????????? 0
FS1 Blocks (0-25)? .....................?????????????? 0
FS2 Blocks (25-50) .....................?????????????? 0
FS3 Blocks (50-75) .....................?????????????? 0
FS4 Blocks (75-100).....................????????????? 24
Full Blocks??????? .....................???????????? 288
Total Blocks............................???????????? 384
Total Bytes.............................?????? 3,145,728
Total MBytes............................?????????????? 3
Unused Blocks...........................????????????? 64
Unused Bytes............................???????? 524,288
Last Used Ext FileId....................????????????? 13
Last Used Ext BlockId...................?????????? 1,032
Last Used Block.........................????????????? 64
PL/SQL procedure successfully completed.
SQL 9I>exec show_space('TESTCOM4');
Unformatted Blocks .....................?????????????? 0
FS1 Blocks (0-25)? .....................?????????????? 0
FS2 Blocks (25-50) .....................?????????????? 0
FS3 Blocks (50-75) .....................?????????????? 0
FS4 Blocks (75-100).....................?????????????? 0
Full Blocks??????? .....................???????????? 226
Total Blocks............................???????????? 256
Total Bytes.............................?????? 2,097,152
Total MBytes............................?????????????? 2
Unused Blocks...........................????????????? 24
Unused Bytes............................???????? 196,608
Last Used Ext FileId....................????????????? 12
Last Used Ext BlockId...................?????????? 1,160
Last Used Block.........................???????????? 104
PL/SQL procedure successfully completed.
SQL 9I>exec show_space('TESTCOM5');
Unformatted Blocks .....................?????????????? 0
FS1 Blocks (0-25)? .....................?????????????? 0
FS2 Blocks (25-50) .....................?????????????? 0
FS3 Blocks (50-75) .....................?????????????? 0
FS4 Blocks (75-100).....................?????????????? 0
Full Blocks??????? .....................???????????? 259
Total Blocks............................???????????? 384
Total Bytes.............................?????? 3,145,728
Total MBytes............................?????????????? 3
Unused Blocks...........................???????????? 117
Unused Bytes............................???????? 958,464
Last Used Ext FileId....................????????????? 13
Last Used Ext BlockId...................?????????? 1,160
Last Used Block.........................????????????? 11
PL/SQL procedure successfully completed.
可見order by子句對compress影響也是比較大,我們應該指定重復值多并且長度大的列做order by以獲得最大的壓縮比。
有人會對compress的讀寫性能表示擔憂,但是實際上無論是全表掃描還是通過索引回表掃描壓縮表的性能都不會比非壓縮表差。至于dml,壓縮表應該是不推薦進行dml的,但是當你通過非bulk操作inert 數據時那么這些數據將會不會進行壓縮存儲,也就是按照普通格式操作,所以效率并不會低,但是還是要避免對壓縮表進行dml操作,尤其是update,update將會導致行遷移,從而使壓縮表的容量比非壓縮表還要大。
總結
以上是生活随笔為你收集整理的oracle表压缩比,oracle的compress 特性介绍的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 南京开车到北京中国民兵武器装备陈列馆有多
- 下一篇: K8S安全军规101:对CNCF最佳实践