2007-05-14

优化Oracle库表设计的若干方法

来源: 本站收集整理 作者:佚名 评论 0 条
 
图 3 指定表数据的存储表空间
  3) 为每个索引指定索引数据的存储表空间。在Table Properties中切换到Indexes页,在这里列出了表的所有索引,双击需设置表空间的索引,在弹出的Index Properties窗口中切换到Options页,按如下方式指定索引的存储表空间。


图 4 指定索引数据的存储表空间

  将表空间的问题延展一下:一个应用系统库表的表空间可以进行更精细的划分。

  首先,假如表中存在LOB类型的字段,有为其指定一个特定的表空间,因为LOB类型的数据在物理存储结构的治理上和一般数据的策略有很大的不同,将其放在一个独立的表空间中,就可方便地设置其物理存储参数了。

  其次,需要考虑库表数据的DML操作特性:根据DML(INSERT,UPDATE,DELETE)操作频繁程度,将几乎不发生任何DML操作的数据放在独立的表空间中,因为极少DML操作的表可设置符合其特性的物理参数:如PCTFREE可置为0,其BUFFER_POOL指定为KEEP,以便将数据缓存在KEEP数据缓存区中等等,不一而足。



  此外,还可以考虑按业务需要将不同的业务模块分开存放,这主要是考虑到备份问题。假设我们有一部分业务数据重要性很强,而其他的业务数据重要性相对较弱,这样就可以将两者分开存储,以便设置不同的备份策略。

  当然,无节制的细化表空间也将带来治理上和部署上的复杂,根据业务需求合理地规划表空间以达到治理和性能上的最佳往往需要更多的权衡。
2、显式为主键列建立反向键索引

  2.1 反向键索引的原理和用途

  我们知道Oracle会自动为表的主键列建立索引,这个默认的索引是普通的B-Tree索引。对于主键值是按顺序(递增或递减)加入的情况,默认的B-Tree索引并不理想。这是因为假如索引列的值具有严格顺序时,随着数据行的插入,索引树的层级增长很快。搜索索引发生的I/O读写次数和索引树的层级数成正比,也就是说,一棵具有5个层级的B-Tree索引,在最终读取到索引数据时最多可能发生多达5次I/O操作。因而,减少索引的层级数是索引性能调整的一个重要方法。

  假如索引列的数据以严格的有序的方式插入,那么B-Tree索引树将变成一棵不对称的"歪树",如图 5所示:


图 5不对称的B-Tree索引
  而假如索引列的数据以随机值的方式插入,我们将得到一棵趋向对称的索引树,如图 6所示:


图 6对称的B-Tree索引
  比较图 5和图 6,在图 5中搜索到A块需要进行5次I/O操作,而图 6仅需要3次I/O操作。

  既然索引列数据从序列中获取,其有序性无法规避,但在建立索引时,Oracle答应对索引列的值进行反向,即预先对列值进行比特位的反向,如1000,10001,10011,10111,1100经过反向后的值将是0001,1001,1101,0011。显然经过位反向处理的有序数据变得比较随机了,这样所得到的索引树就比较对称,从而提高表的查询性能。

  但反向键索引也有它局限性:假如在WHERE语句中,需要对索引列的值进行范围性的搜索,如BETWEEN、<、>等,其反向键索引无法使用,此时,Oracle将执行全表扫描;只有对反向键索引列进行 <>和 = 的比较操作时,其反向键索引才会得到使用。

  2.2 反向键索引的SQL语句
共5页: 上一页 [1] [2] 3 [4] [5] 下一页
(本文仅表明作者个人观点,不代表本站及其管理员立场.) 推荐 收藏 投稿 打印 返回 关闭
上一篇:通过JDBC连接oracle数据库的十大技巧  
下一篇:如何使用改变跟踪技术加速Oracle递增备份
    评论加载中…
 推荐文章
     

网站首页  -  网站地图 -   站长论坛  -  网站投稿  -    -  网站管理
Copyright © 2008 芜湖站长站 All Rights Reserved 皖ICP备07500611号