如何和何时使用Oracle9i的位图合并索引

2002-11-22 14:08:07【作者】 畅享网 【进入论坛】
广告

如何和何时使用Oracle9i的位图合并索引

 Oracle9i已经把位图合并索引添加到其令人难以置信的表格合并方法数组里了。这个新的表格访问方法需要你创建一个索引,它能在索引被创建时进行合并,还能创建一个合并所要使用的键的位图索引。但是和大多数关系型数据库的索引不同,被索引的数据列并不驻留在表格内。Oracle通过允许在索引创建句法里包括WHERE子句而彻底革新了索引的创建方法。这个特性是通过SQL访问关系型表格的方法大变革。  

位图合并索引对涉及低基数数据列(例如少于300个不同值的数据列)的表格合并是极其有用的。但是位图合并索引并不是在所有情况下都是有用的。你不应该将它们用于OLTP数据库,因为和更新位图索引相关的开销太大了。让我们更加仔细地看看这种类型的索引是如何工作的。

位图合并索引是如何工作的

为了说明位图合并索引,我会使用一个简单的例子,一个多对多关系,我们拥有一些部件和供应商的清单表格,并把它作为这个多对多关系的交叉点。每个部件都有很多供应商,每个供应商都能提供许多部件(图A)。

图A

 Oracle表格的多对多关系

在这个例子里,我会假设数据库里有300种类型的部件,供应商从(美国)全部50个州提供部件。所以在State数据列里有50个不同的值,而在Part_type数据列里只有300个不同的值。

要注意在图A里,我们使用Supplier和Part表格所包含的数据列在Inventory里创建了一个索引。位图合并索引所隐含的主旨是预合并低基数数据列,从而让整个合并更加迅速。

众所周知,位图索引能够改善Oracle9i查询的性能,这些查询里的动词要涉及到低基数数据列,但是这个技术从来都不会被用在低基数数据列驻留在外来表里的情况下。

要创建一个位图合并索引,使用以下Oracle DDL:(注意CREATE INDEX句法里所包括的FROM和WHERE子句)

create bitmap index
part_suppliers_state
on
inventory( parts.part_type, supplier.state)
from
inventory i,parts p,supplier s
where
i.part_id=p.part_id and i.supplier_id=p.part_id;
 
活动中的位图合并索引
 
要了解位图合并索引是如何工作的,看这个SQL查询的例子。我们来假设想要一个位于北卡罗来纳的活塞供应商的列表。要得到这个列表,你就要用这个查询:

Select supplier_name
From parts
natural join inventory
natural join suppliers
where part_type = 'piston' and state='nc';

在Oracle9i以前,这个SQL查询是由所有三个表格的嵌套循环合并或者散裂合并来服务的。有了位图合并索引,索引会预合并表格,这样查询就能迅速地在所有三个表里取回符合条件的表格行的行ID列表。

注意这个位图合并索引指定了这三个表格合并的标准,并使用Part_type和State键在交叉表格(Inventory)上创建了一个位图索引(图A)。

Oracle基准声明位图合并索引能够以比传统索引方法快七倍的速度运行一个查询。但是,这个速度的提升还依赖于许多因素,位图合并也不是万能药。使用位图合并索引的几点限制是:

被索引的数据列必须是低基数的——通常只有不到300个不同的值。

查询里必须不能有任何在WHERE子句里有,而在索引里没有的对数据列的参照。

更新位图合并索引的开销是很可观的。为了能够实际使用,对于每天都有的批量加载任务,位图合并索引在每天晚上会被减少使用和重建。这意味着位图合并索引只对像Oracle这样在处理时保持只读的数据仓才有用。

记住:位图合并索引能够极大地提高特定数据仓的查询速度,但是其代价是在位图索引创建的时候要预合并表格。你还必须要注意大量的更新。在表格的数据变更时,位图索引的更改是相当慢的,这会严重地降低目标表格INSETT和UPDATE DML。

对位图合并索引的排斥

在SQL优化器被允许调用一个位图合并索引时还是有一些限制的。对于WHERE子句里有,而没有出现在位图合并索引里的,具有其他标准的查询,Oracle9i会不能使用这个索引来为查询服务。例如下面这个查询就没有使用位图合并索引:

Select supplier_name
     From parts
     natural join inventory
     natural join suppliers
     where part_type = 'piston'and state = 'nc' and part_color = 'yellow';
    
使用位图合并索引还需要进行策划


Oracle9i为极大地提高查询性能引入了极其复杂的执行计划特性。对Oracle9i专家的挑战是理解这些新的索引特性,权衡其他索引方法的利弊,判断什么时候新特性能够被来提高查询速度。

如果您希望与本文章的作者或其所在机构,进一步交流,请联系:畅享网 姜小姐
jill.jiang@amteam.org | 021-51096826-112 | 在线联系
老孙的IT运维管理之道[原创]用户的BSM用户的IT业务管..

从企业实际的IT运营角度来看,BSM是推动IT与业务融合,实现、改善WCNG司IT管理和治理的最佳实践之一。

吕建伟 专栏和CIO问答软件项目实施管理

现实中很少能按照正规流程来的,所以只能把流程中的各个环节拆开,个个击破,以后就可以见招拆招了。

ITIL实施:CIO时刻准备着

千军易得,一将难求,要推进ITIL实施,CIO扮演的角色不容忽视。吹响集结号,CIO出击的时刻已经来到。

节能与优化IT 企业CIO过冬良策

当前金融危机的影响还在继续漫延,很多企业都在苦寻过冬的良策,在这种情况下,节能与优化技术与产品无疑成为CIO们关注的首要对象,本次选题就是针对节能与优化IT来为CIO们提供过冬的良……