直接索引查詢的實現和目的
當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成本。
理想情況下,只有當我們只需要檢查表中是否存在行/資料時,才使用這類查詢。
廣告
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP