oracle 的lob & long

一直认为lob类型的性能要好过long,但是之前只了解到long的种种限制,oracle也是不推荐使用long类型,这几天由于一个项目问题,产品里面一个表字段用了long类型,分析下来操作long的时候,性能有所影响,想把它改成lob,就简单验证了一下

首先创建两个测试表:

create table test_long (a int primary key,b long);
create table test_clob (a int primary key,b clob);

用附件java代码,往两个表里面各插入100条数据,保证插入数据是一样的,lob字段长度为10k(如果小于4k,oracle可以把它保存到到表内,不会存储在表外,性能没有问题,这个我基本确定,而且我们应用中这个字段经常会超过4k)。

做一个简单查询对比一下:

SQL> set autotrace traceonly;
SQL> select * from test_clob where a=1;

统计信息
----------------------------------------------------------
        331  recursive calls
          0  db block gets
         69  consistent gets
          4  physical reads
          0  redo size
       1278  bytes sent via SQL*Net to client
        837  bytes received via SQL*Net from client
          5  SQL*Net roundtrips to/from client
         12  sorts (memory)
          0  sorts (disk)
          1  rows processed

SQL> select * from test_long where a=1;

统计信息
----------------------------------------------------------
        236  recursive calls
          0  db block gets
         43  consistent gets
          0  physical reads
          0  redo size
        675  bytes sent via SQL*Net to client
        531  bytes received via SQL*Net from client
          3  SQL*Net roundtrips to/from client
          5  sorts (memory)
          0  sorts (disk)
          1  rows processed

对比一下,long开销比lob小,当然你可以把lob字段启用缓存,把4次物理读去掉,但还是多了(73-43)次逻辑读,update也试了一下,lob产生的redo比long大,就不列出来了,有兴趣的可以自己试试

测试下来,看来之前的认识不对,不确定的东西最好还是动手试试,当然对于新应用,还是不建议用long,毕竟oracle已经废弃它了。

testClobLong.java

posted on 2008-06-24 01:18 tacy lee 阅读(443) 评论(0)  编辑  收藏 所属分类: 性能相关数据库


只有注册用户登录后才能发表评论。


网站导航: