您将如何在COBOL-DB2程序中实现直接索引查找?

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

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

ORDER_ID
订购日期
合计订单
Z22345
2020年10月30日
342
Z33412
2020年8月14日
543
Z56990
2020年10月19日
431
Z56902
2020年9月21日
6743
Z99781
2020/04/11
443
Z56112
2020年9月29日
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’

以上查询的结果如下。

ORDER_ID
订购日期
Z33412
2020年8月14日

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

与其他访问方法相比,这种访问方法非常快,因为优化程序不必在数据页中查找所需的数据。所有信息都已在索引页中,这大大降低了SQL成本。

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