組合多個(gè)索引掃描的輸出 可以使用多個(gè)索引(或相同索引的多次掃描)來完成單個(gè)查詢。 ·多個(gè)索引的And-Equal操作 假如在一個(gè)查詢中為多個(gè)索引指定了限定條件,則優(yōu)化器在解決這個(gè)查詢時(shí)或許能夠使用多個(gè)索引。 例如: 在bookshelf表的title列和CategoryName列上有兩個(gè)索引: select * from bookshelf where title>'M' and CategoryName>'B' 此查詢的where子句包含了兩個(gè)獨(dú)立的限定條件,每個(gè)限定條件對應(yīng)一個(gè)不同的索引,第一個(gè)限定條 件對于應(yīng)主鍵索引,第二個(gè)限定條件對應(yīng)于bookshelf$category索引,在解決此查詢時(shí),優(yōu)化程序可 能同時(shí)使用這兩個(gè)索引,也可能會進(jìn)行全表掃描,假如使用兩個(gè)索引,每個(gè)索引都將通過Index Range scan操作來掃描,從主鍵索引掃描返回的RowID將與從bookshelf$category索引返回的RowID進(jìn)行比較。 從兩個(gè)索引返回的那些RowID將在后面的Table access by RowID操作中使用: 主鍵索引的Index Range Scan-- bookshelf的 -->And-Equal-->Table Access by bookshelf$category索引的-- RowID Index Range ScanAnd-Equal操作比較兩個(gè)索引掃描的結(jié)果,一般來說,單個(gè)多列索引的訪問(在查詢的where子句的限定 條件中使用了復(fù)合索引的首列)將比多個(gè)單列索引的And-Equal完成的更好! And-Equal操作相當(dāng)于: select rowid from bookshelf where title>'M' insersect select rowid from bookshelf where categoryname>'B' 它把兩個(gè)結(jié)果集共有部分的RowID拿出來去做bookshelf的Table Access by RowID。