WEB开发网
开发学院数据库Oracle 优化Oracle库表设计的若干方法 阅读

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

 2006-08-06 12:00:14 来源:WEB开发网   
核心提示: 如果索引列的数据以严格的有序的方式插入,那么B-Tree索引树将变成一棵不对称的"歪树",优化Oracle库表设计的若干方法(6),如图 5所示:图 5不对称的B-Tree索引而如果索引列的数据以随机值的方式插入,我们将得到一棵趋向对称的索引树,主键名为PK_ORDER

如果索引列的数据以严格的有序的方式插入,那么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语句

回到我们上面的例子,由于T_ORDER和T_ORDER_ITEM的主键值来源于序列,主键值是有严格顺序的,所以我们应该摒弃默认的Oracle所提供的索引,而采取显式为主键指定一个反向键索引的方式。

ORDER_ID为T_ORDER表的主键,主键名为PK_ORDER,我们为ORDER_ID列上建立一个反向键索引IDX_ORDER_ID,并使PK_ORDER_ID使用这个索引,其SQL语句如下:

上一页  1 2 3 4 5 6 7 8 9 10  下一页

Tags:优化 Oracle 设计

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接