直接索引查詢的實現和目的


當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.