优化器可以通过数种方法使用组合索引(涵盖多个列的索引)。
如果第一个过滤器是等式过滤器,而随后的列有范围(<、<=、> 和 >=)表达式,数据库服务器可以使用组合索引。以下过滤器示例使用了组合索引中的列:
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) 创建组合索引。由于数据库服务器具有双向遍历能力,您只需创建这些索引其中一个。 有关双向遍历的更多信息,请参阅 GBase 8s SQL 指南:语法。