在bookshelf表的title列和CategoryName列上有两个索引:
select * from bookshelf where title>'M' and CategoryName>'B'
此查询的where子句包含了两个独立的限定条件,每个限定条件对应一个不同的索引,第一个限定条
件对于应主键索引,第二个限定条件对应于bookshelf$category索引,在解决此查询时,优化程序可
能同时使用这两个索引,也可能会进行全表扫描,如果使用两个索引,每个索引都将通过Index Range
scan操作来扫描,从主键索引扫描返回的RowID将与从bookshelf$category索引返回的RowID进行比较。
从两个索引返回的那些RowID将在后面的Table Aclearcase/" target="_blank" >ccess by RowID操作中使用:
主键索引的Index Range Scan--| bookshelf的
|-->And-Equal-->Table Access by
bookshelf$category索引的--| RowID
Index Range Scan
And-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。