优化器可以通过数种方法使用复合索引(涵盖多个列的索引)。
如果第一个过滤器是等式过滤器,而随后的列有 范围(<、<=、> 和 >=)表达式,数据库服务器可以使用复合索引。 以下过滤器示例使用了复合索引中的列:
WHERE a=1
WHERE a>=12 AND a<15
WHERE a=1 AND b < 5
WHERE a=1 AND b = 17 AND c >= 40
以下过滤器示例不能使用该复合索引:
WHERE b=10
WHERE c=221
WHERE a>=12 AND b=15
使用索引但不引用表的扫描称为仅关键字搜索。
如果以不同程度从最高到最低为序对列创建复合索引,那么执行效率最高。 换言之,在 SELECT 语句中使用 DISTINCT 关键字进行查询时,返回不同行最多的列应排在复合索引的第一位。
SELECT * FROM t1 ORDER BY a, b DESC;
要在对列 a 进行升序排序并对列 b 进行降序排序时避免使用临时表,您必须对 (a, b DESC) 或 (a DESC, b) 创建复合索引。由于数据库服务器具有双向遍历能力,您只需创建这些索引其中一个。 有关双向遍历的更多信息,请参阅 IBM Informix Guide to SQL: Syntax。