Oracle组合索引(composite index)是指在数据库表的多个列上创建的索引。当查询操作中涉及到这些列并且是组合索引的前导列时,组合索引会生效。
组合索引的前导列是指在索引中排在最前面的列。只有当查询的条件中使用了组合索引的前导列,且查询条件满足以下特性时,组合索引才会生效:
-
查询条件中的列顺序与索引中的列顺序完全一致。
-
查询条件中的列值是用等值比较(
=
)或范围比较(>
、<
、>=
、<=
)操作符。 -
如果查询条件中的列值是用
LIKE
操作符,则必须是不以通配符开始的常量。
例如,假设有一个表EMPLOYEES
,其中包含列EMPLOYEE_ID
和DEPARTMENT_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自动生成,仅供参考。