-- 创建表
- create table TB_CP_TEST
- (
- ID NUMBER not null,
- NAME1 CHAR(2000) default 'A',
- NAME2 CHAR(2000) default 'A',
- NAME3 CHAR(2000) default 'A',
- NAME4 CHAR(2000) default 'A',
- NAME5 CHAR(2000) default 'A',
- NAME6 CHAR(2000) default 'A',
- NAME7 CHAR(2000) default 'A'
- )
- ;
-- 写入数据
- Declare
- Begin
- For i In 1 .. 10000 Loop
- Insert Into Tb_Cp_Test (Id) Values (i);
- Commit;
- End Loop;
- End;
- /
-- 查看表占用空间大小
- Select a.BYTES
- From dba_segments a
- Where a.segment_name = 'TB_CP_TEST';
- BYTES
- ----------
- 251658240
-- 将表修改为可以压缩
- Alter Table TB_CP_TEST compress;
-- 压缩表
- alter table TB_CP_TEST move compress;
-- 查看表压缩后占用空间大小
压缩前后占用空间大小分别是251,658,240 150,994,944 可见压缩能节省不少空间,但表压缩后对表进行DML语句会消耗更多的io和cpu,同时表压缩后,索引会失效。
- Select a.BYTES
- From dba_segments a
- Where a.segment_name = 'TB_CP_TEST';
- BYTES
- ----------
- 150994944
11gR2以后的版本可以通过dbms_compression包来查看压缩后的比例.
- Create Table tb_compress_test
- As
- Select * From dba_objects;
- Alter Table tb_compress_test Move Compress;
- DECLARE
- blkcnt_comp PLS_INTEGER;
- blkcnt_uncm PLS_INTEGER;
- row_comp PLS_INTEGER;
- row_uncm PLS_INTEGER;
- comp_ratio number;
- comp_type VARCHAR2(30);
- BEGIN
- dbms_compression.get_compression_ratio(
- scratchtbsname => 'TEST',
- ownname => 'HXL',
- tabname => 'TB_COMPRESS_TEST',
- partname => NULL,
- comptype => dbms_compression.comp_for_oltp,
- blkcnt_cmp => blkcnt_comp,
- blkcnt_uncmp => blkcnt_uncm,
- row_cmp => row_comp,
- row_uncmp => row_uncm,
- cmp_ratio => comp_ratio,
- comptype_str => comp_type);
- dbms_output.put_line('Block Count Compressed: ' || TO_CHAR(blkcnt_comp));
- dbms_output.put_line('Block Count UnCompressed: ' || TO_CHAR(blkcnt_uncm));
- dbms_output.put_line('Row Count Compressed: ' || TO_CHAR(row_comp));
- dbms_output.put_line('Row Count UnCompressed: ' || TO_CHAR(row_uncm));
- dbms_output.put_line('Block Count Compressed: ' || TO_CHAR(comp_ratio));
- dbms_output.put_line('Compression Type: ' || comp_type);
- END;
- Block Count Compressed: 353
- Block Count UnCompressed: 1091
- Row Count Compressed: 216
- Row Count UnCompressed: 69
- Block Count Compressed: 3
- Compression Type: "Compress For OLTP"
|