直接索引查找的实现和目的


当WHERE子句谓词中使用的所有列都是索引的一部分时,DB2优化器会选择直接索引查找。

例如,如果我们有如下所示的ORDERS DB2表。

订单ID (ORDER_ID)
订单日期 (ORDER_DATE)
订单总额 (ORDER_TOTAL)
Z22345
30-10-2020
342
Z33412
14-08-2020
543
Z56990
19-10-2020
431
Z56902
21-09-2020
6743
Z99781
04-11-2020
443
Z56112
29-08-2020
889

在这个表中,有一个索引,其中包含名为ORDER_ID和ORDER_DATE的列。对于下面的查询,DB2优化器将选择直接索引查找,因为SELECT语句中使用的列也是索引的一部分。

示例

SELECT ORDER_ID, ORDER_DATE, INVOICE_ID FROM ORDERS
   WHERE ORDER_ID = ‘Z33412’ AND ORDER_DATE = ‘14-08-2020’

上述查询的结果如下。

订单ID (ORDER_ID)
订单日期 (ORDER_DATE)
Z33412
14-08-2020

在上面的查询中,WHERE子句对主键的一部分列都有谓词,因此它们的索引应该已经存在。在这种情况下,优化器可以使用这些索引在索引空间中查找,并从数据空间中检索相应的数据(在本例中为INVOICE_ID)。

这种访问方法比其他访问方法快得多,因为优化器不必在数据页中查找所需的数据。所有信息都已存在于索引页中,这大大降低了SQL成本。

理想情况下,只有当我们只需要检查表中是否存在行/数据时,才使用这类查询。

更新于:2020年11月30日

浏览量:134

开启你的职业生涯

通过完成课程获得认证

开始
广告
© . All rights reserved.