oracle組合索引什麼情況下生效?

dw2nn發表於2024-04-02

Oracle組合索引(composite index)是指在資料庫表的多個列上建立的索引。當查詢操作中涉及到這些列並且是組合索引的前導列時,組合索引會生效。

組合索引的前導列是指在索引中排在最前面的列。只有當查詢的條件中使用了組合索引的前導列,且查詢條件滿足以下特性時,組合索引才會生效:

  1. 查詢條件中的列順序與索引中的列順序完全一致。

  2. 查詢條件中的列值是用等值比較(=)或範圍比較(><>=<=)運算子。

  3. 如果查詢條件中的列值是用LIKE運算子,則必須是不以萬用字元開始的常量。

例如,假設有一個表EMPLOYEES,其中包含列EMPLOYEE_IDDEPARTMENT_ID,並且有一個組合索引是基於這兩個列建立的。

CREATE INDEX idx_employee_dept ON EMPLOYEES(EMPLOYEE_ID, DEPARTMENT_ID);

-- 使用索引的查詢
SELECT * FROM EMPLOYEES WHERE EMPLOYEE_ID = 100 AND DEPARTMENT_ID = 20;

-- 查詢條件順序與索引順序不一致,不會使用索引
SELECT * FROM EMPLOYEES WHERE DEPARTMENT_ID = 20 AND EMPLOYEE_ID = 100;

-- 使用範圍比較,會使用索引
SELECT * FROM EMPLOYEES WHERE EMPLOYEE_ID > 100 AND DEPARTMENT_ID = 20;

-- 使用LIKE運算子且不是常量,不會使用索引
SELECT * FROM EMPLOYEES WHERE EMPLOYEE_ID LIKE '100%';

請注意,只有當查詢的前導列都用於查詢條件,且順序一致時,組合索引才會被使用。如果查詢中包含了組合索引的其他列但不是前導列,或者查詢條件中的列順序與索引不一致,那麼組合索引不會生效。

提示:AI自動生成,僅供參考。

相關文章