Oracle SQL的优化(2)

王朝oracle·作者佚名  2008-05-31
宽屏版  字体: |||超大  

组合多个索引扫描的输出

可以使用多个索引(或相同索引的多次扫描)来完成单个查询。

·多个索引的And-Equal操作

假如在一个查询中为多个索引指定了限定条件,则优化器在解决这个查询时或许能够使用多个索引。

例如:

在bookshelf表的title列和CategoryName列上有两个索引:

select * from bookshelf where title>'M' and CategoryName>'B'

此查询的where子句包含了两个独立的限定条件,每个限定条件对应一个不同的索引,第一个限定条

件对于应主键索引,第二个限定条件对应于bookshelf$category索引,在解决此查询时,优化程序可

能同时使用这两个索引,也可能会进行全表扫描,假如使用两个索引,每个索引都将通过Index Range

scan操作来扫描,从主键索引扫描返回的RowID将与从bookshelf$category索引返回的RowID进行比较。

从两个索引返回的那些RowID将在后面的Table Access by RowID操作中使用: 主键索引的Index Range Scan-- bookshelf的

-->And-Equal-->Table Access by

bookshelf$category索引的-- RowID

Index Range ScanAnd-Equal操作比较两个索引扫描的结果,一般来说,单个多列索引的访问(在查询的where子句的限定

条件中使用了复合索引的首列)将比多个单列索引的And-Equal完成的更好!

And-Equal操作相当于:

select rowid from bookshelf where title>'M'

insersect

select rowid from bookshelf where categoryname>'B'

它把两个结果集共有部分的RowID拿出来去做bookshelf的Table Access by RowID。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
© 2005- 王朝网络 版权所有