DB2中多索引和仅索引访问路径的用法和示例

问题:解释DB2 Optimizer使用的多索引访问路径和仅索引访问路径之间的区别。举两个例子。

仅索引访问和多索引访问是DB2优化器为了获取查询结果而选择的访问路径类型。当SELECT查询中给定的所有列都存在于索引中时,将使用仅索引访问路径。在这种情况下,优化器不必转到数据页即可获取结果,所有数据在索引页中都可用。

例如,ORDERS表的主键为ORDER_ID,然后对于以下SQL查询,DB2优化器将选择仅索引访问。

示例

SELECT ORDER_ID FROM ORDERS.

多索引访问是SQL查询的WHERE子句基于两个或多个索引的谓词时,DB2优化器选择的访问路径。在这种情况下,将为每个索引(WHERE子句中的列)提取来自索引空间/数据空间的结果,然后按照WHERE子句中使用的逻辑运算符(AND,OR)将结果合并。

例如,如果ORDERS DB2表在ORDER_ID上具有主键,而在INVOICE_ID上具有唯一索引。下面的SQL查询将采用多索引访问路径。

示例

SELECT ORDER_ID, INVOICE_ID FROM ORDERS WHERE
   ORDER_ID IN (‘Z33476’, ’Z11674’, ‘Z88901’) AND
   INVOICE_ID IN (‘A19908’, ‘A90771’)