• 一周以来工作总结关于表的压缩


         昨天写了一下关于Oracle表压缩的问题(http://www.cnblogs.com/wingsless/archive/2012/09/23/2699309.html),由于时间原因没有具体的实验,只是使用了网上的资料,但是这并不是我的风格,因为网上资料直接拿来转载的多,自己原创的少。所谓事必躬亲嘛,做个实验。

         有两张表,一张压缩(TEST_1)一张不压缩(TEST)。

         首先看看占用空间的情况,查表的语句如下:

         

    BEGIN
      FOR I IN 1 .. 50 LOOP
        INSERT /*+append*/ INTO TEST_1
          SELECT * FROM DBA_OBJECTS;
        COMMIT;
      END LOOP;
    END;
    
    BEGIN
      FOR I IN 1 .. 50 LOOP
        INSERT  INTO TEST
          SELECT * FROM DBA_OBJECTS;
        COMMIT;
      END LOOP;
    END;

         下面看看空间占用的情况:

          可以看到,压缩表确实在空间占用的减少上特别给力!只是原来大小的29%左右。这效果快赶上用rar压缩word文件和文本文件了。

          接下来,查看一下select的效率。在执行计划出来之前要先analyze,因为只有analyze过的表,执行计划才能达到最准确的(http://www.cnblogs.com/wingsless/archive/2012/02/24/2367176.html)。

          

          通过上面两张图片,可以发现,压缩表在查询的时候不管是CPU的COST还是Bytes都要较非压缩表小。从网上能查到的资料显示,压缩表在某些条件下是可以提高查询效率的,这句话看来是对的。但是压缩表会不会拉低查询效率我还不知道,暂时也没有发现实验的方法,以后发现了会继续实验。

          大部分资料都显示,压缩表会影响插入效率。我又建立了一张表,数据很多很多,分别插入上述两张表中:

         

         可以很明显的看到,压缩表的插入时间是非压缩表的将近两倍之多。这就很好的说明了压缩表的插入效率非常低下,建议对历史数据进行转移的时候选择在夜间使用人数较少,CPU较为空闲的时候进行。

         如果是一个没有压缩过的表,压缩后效率如何?

         有一张表叫做TEST_2,插入数据的方法和上面的TEST一样,它的大小为408MB。还有刚才那个test表,truncate之后再插入数据,不同的是这次加上了append。这样做为的是看看加了append是不是会增加存储空间,这属于拓展思维了吧。但是事实是TEST表也是408M。然后把两个表都压缩一下:

         

          惊喜的发现使用append的表压缩起来更给力,这个现象是为什么呢,我个人猜测和使用了hint之后数据直接往队尾插是有关系的,我这个表是新建的,但是如果是生产系统上的那些表,常年更新着,应该会有很多碎片,常年使用hint的话估计会出现一些问题,尤其是空间被占用不好解除占用的问题。

          test刚才被我转换成了压缩表,统计一下信息之后,更新一个数据看看是不是会像rar压缩一样,要更新一个文件,就要先把文件解压,然后再压缩。占用一定的存储空间。

          

    UPDATE TEST T SET T.OWNER = 'OI' WHERE T.OWNER = 'SYS';

          

          确实大了不少。现在弄一张非压缩表,不压缩数据,然后更新看看占用,现在TEST_2被我拿来测试,数据量是368MB,更新之,查看一下:

          

          可以看到非压缩表并不会像压缩表那样在更新的时候占用额外的空间。

          那么综上所述,压缩表的好处就是可以有效的降低存储空间的占用,还可以提升查询的效率,但是缺点也很明显,那就是会提高插入数据的时间,会在更新数据的时候占用额外的空间。可以看出来,压缩表更适合于数据仓库的建设,毕竟数据太多了,不得不考虑存储的成本,我以前的一家公司有一个客户,采用的办法就是把原始的文本数据文件刻到蓝光光盘里,50多一张盘,人家买得起。但是人家是备份数据,防止数据灾难的,数据压缩,非常适合数据仓库。

  • 相关阅读:
    1202诗人基本介绍&诗人画像
    1205人物关系优化&诗人轨迹
    把SQL Server 2000 表中的自动编号Id重新开始排列
    一个一直都不明白的东西今天知道了。关于sqlserver2000自动执行。
    服装打版界的扛把子ET自定义操作
    手把手教你搭建集中式版本控制系统SVN服务器
    分享一次实用的爬虫经验
    盘点CSV文件在Excel中打开后乱码问题的两种处理方法
    盘点服装设计所经常性使用的软件ET(下篇)
    sql 每个企业选择一条产品
  • 原文地址:https://www.cnblogs.com/wingsless/p/2700696.html
Copyright © 2020-2023  润新知