ORACLE 表压缩

来源:互联网 发布:qq飞车f22猛禽数据 编辑:程序博客网 时间:2024/05/16 02:32
--ORACLE 表压缩/*从Oracle9iR2 开始,ORACLE提供了表/表空间压缩技术,以减少磁盘开销,节省空间,并在某些情况下提高查询性能。表压缩是如何工作的在Orcle9i第2版中,表压缩特性通过删除在数据库表中发现的重复数据值来节省空间。压缩是在数据库的数据块级别上进行的。当确定一个表要被压缩后,数据库便在每一个数据库数据块中保留空间,以便储存在该数据块中的多个位置上出现的数据的单一拷贝。这一被保留的空间被称作符号表(symbol table)。被标识为要进行压缩的数据只存储在该符号表中,而不是在数据库行本身内。当在一个数据库行中出现被标识为要压缩的数据时,该行在该符号表中存储一个指向相关数据的指针,而不是数据本身。节约空间是通过删除表中数据值的冗余拷贝而实现的。*/--ORACLE 表压缩Oracle至少有六种压缩的方法:1.BASIC compression, introduced in Oracle 8 already and only recommended for Data Warehouse2.OLTP compression, introduced in Oracle 11 and recommended for OLTP Databases as well3.QUERY LOW compression (Exadata only such as asm), recommended for Data Warehouse with Load Time as a critical factor4.QUERY HIGH compression (Exadata only such as asm), recommended for Data Warehouse with focus on Space Saving5.ARCHIVE LOW compression (Exadata only such as asm), recommended for Archival Data with Load Time as a critical factor6.ARCHIVE HIGH compression (Exadata only such as asm), recommended for Archival Data with maximum Space Saving--PS:QUERY LOW ,QUERY HIGH ,ARCHIVE LOW,ARCHIVE HIGH 只适合exadata数据库--创建正常表create table t_test as select * from dba_objects,(select level from dual connect by level <= 100) where 1 =2;--压缩表create table t_test1 compress as select * from dba_objects,(select level from dual connect by level <= 100) where 1=2;--create table t_test2 compress for oltp  as select * from dba_objects,(select level from dual connect by level <= 100);--create table t_test3 compress for QUERY LOW as select * from dba_objects,(select level from dual connect by level <= 100);--create table t_test4 compress for QUERY HIGH as select * from dba_objects,(select level from dual connect by level <= 100);--create table t_test5 compress for ARCHIVE LOW as select * from dba_objects,(select level from dual connect by level <= 100);--create table t_test6 compress for ARCHIVE HIGH as select * from dba_objects,(select level from dual connect by level <= 100);--修改现有表为压缩表: alter table t_test1 compress;--取消表的压缩: alter table t_test1 nocompress;--查询表是否压缩select table_name,compression from user_tables where table_name in ('T_TEST','T_TEST1');--插入数据/*当表指定compress时,其它表中(表空间)的数据并没有压缩,它只是修改了数据字典的设置;只有在向一个表中加裁/插入数据时,才会压缩数据.只有在使用下面4种方法时,表中的数据才会被压缩存放:1.直接路径的 sql*load 2.带有\*+ append*\的 insert语句 3.create table .. as select.. 4.并行insert*/--正常插入insert into t_test t select * from dba_objects,(select level from dual connect by level <= 100);insert into t_test1 t select * from dba_objects,(select level from dual connect by level <= 100);insert /*+append_value(t)*/ into t_test t select * from dba_objects,(select level from dual connect by level <= 100);--查询占用表空间select t.segment_name,t.BYTES/1024/1024 from user_segments t where t.segment_name in('T_TEST','T_TEST1');--基本没压缩--T_TEST  856--T_TEST1  768--清除表truncate table t_test;truncate table t_test1;--使用append方式插入insert /*+append*/ into t_test t select * from dba_objects,(select level from dual connect by level <= 100);insert /*+append*/ into t_test1 t select * from dba_objects,(select level from dual connect by level <= 100);--再次查询占用表空间select t.segment_name,t.BYTES/1024/1024 from user_segments t where t.segment_name in('T_TEST','T_TEST1');--T_TEST  856--T_TEST1  240--压缩的表不能删除字段alter table t_test drop column status; --successfulalter table t_test1 drop column status; --ORA-39726: unsupported add/drop column operation on compressed tables--处理方法 需要进行解压缩后才能删除字段Alter Table t_test1 Move Nocompress;alter table t_test1 drop column status;alter table t_test1 compress;alter table t_test1 move compress;--查询效率比较--查询1 查询正常的表SQL> Select t.object_id, t.object_name  2    From t_test t  3   Where t.object_id = 20  4   Order By t.object_id  5  /已选择100行。执行计划----------------------------------------------------------                      Plan hash value: 2796558804                                                                                                                                     ----------------------------------------------------------------------------    | Id  | Operation         | Name   | Rows  | Bytes | Cost (%CPU)| Time     |    ----------------------------------------------------------------------------    |   0 | SELECT STATEMENT  |        |  1204 | 95116 | 29765   (1)| 00:05:58 |    |*  1 |  TABLE ACCESS FULL| T_TEST |  1204 | 95116 | 29765   (1)| 00:05:58 |    ----------------------------------------------------------------------------                                                                                    Predicate Information (identified by operation id):                             ---------------------------------------------------                                                                                                                1 - filter("T"."OBJECT_ID"=20)                                                                                                                               Note                                                                            -----                                                                              - dynamic sampling used for this statement (level=2)                         统计信息----------------------------------------------------------                                0  recursive calls                                                              0  db block gets                                                           217864  consistent gets                                                         108950  physical reads                                                               0  redo size                                                                 1791  bytes sent via SQL*Net to client                                           481  bytes received via SQL*Net from client                                       8  SQL*Net roundtrips to/from client                                            0  sorts (memory)                                                               0  sorts (disk)                                                               100  rows processed                                                     --查询2 查询压缩的表SQL> Select t.object_id, t.object_name  2    From t_test1 t  3   Where t.object_id = 20  4   Order By t.object_id;已选择100行。执行计划----------------------------------------------------------                      Plan hash value: 1883417357                                                                                                                                     -----------------------------------------------------------------------------   | Id  | Operation         | Name    | Rows  | Bytes | Cost (%CPU)| Time     |   -----------------------------------------------------------------------------   |   0 | SELECT STATEMENT  |         |   484 | 38236 |  8403   (2)| 00:01:41 |   |*  1 |  TABLE ACCESS FULL| T_TEST1 |   484 | 38236 |  8403   (2)| 00:01:41 |   -----------------------------------------------------------------------------                                                                                   Predicate Information (identified by operation id):                             ---------------------------------------------------                                                                                                                1 - filter("T"."OBJECT_ID"=20)                                                                                                                               Note                                                                            -----                                                                              - dynamic sampling used for this statement (level=2)                         统计信息----------------------------------------------------------                              206  recursive calls                                                              0  db block gets                                                            30428  consistent gets                                                          30681  physical reads                                                             116  redo size                                                                 1791  bytes sent via SQL*Net to client                                           481  bytes received via SQL*Net from client                                       8  SQL*Net roundtrips to/from client                                            4  sorts (memory)                                                               0  sorts (disk)                                                               100  rows processed       

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 3dmax贴图太大了怎么办 嘴皮边缘颜色深怎么办 嘴巴周围肤色暗沉怎么办 中奖彩票被洗了怎么办 牙龈下面长米粒肉疙瘩怎么办 书画印章盖反了怎么办 金龙鱼一个月不吃东西怎么办 罗汉鱼头撞扁了怎么办 房顶开槽埋线白色不一样怎么办 顶上灯挪位置线怎么办 马蜂窝弄掉又来怎么办 蜂窝弄掉又有怎么办 2018年小龙虾底板脏怎么办 一本分数线擦边过怎么办 玩具塑料球扁了怎么办 胶皮与海绵开了怎么办 安卓不支持flash了怎么办 看视频要加载flash怎么办 下水道管子铁皮破了怎么办 炸金花牌一样大怎么办 玩棋牌游戏输了怎么办 苹果7插耳机外放怎么办 出国种菠菜抓了怎么办 在菲做菠菜抓到怎么办 3串1中两个怎么办 微博账号封停怎么办 阴阳师账号被永久封停怎么办 寒刃2账号被禁用怎么办 输了好多钱我该怎么办 亲朋打鱼别处在玩怎么办 做糯米蛋的蛋清怎么办 水田地没耙地平怎么办 宝宝拉鸡蛋花样大便怎么办 电子琴伴奏区无旋律音怎么办 手机触摸屏摔坏了怎么办 手机充着电玩游戏卡怎么办? 4个月宝宝拉肚子怎么办 6个月宝宝上火怎么办 1月婴儿大便干燥怎么办 椰子鞋350线开了怎么办 打完篮球小腿肌肉酸痛怎么办