使用组合索引

优化器可以通过数种方法使用组合索引(涵盖多个列的索引)。

数据库服务器可以通过以下方法对列 abc(按此顺序)使用索引:

如果以不同程度从最高到最低为序对列创建组合索引,那么执行效率最高。换言之,在 SELECT 语句中使用 DISTINCT 关键字进行查询时,返回不同行最多的列应排在组合索引的第一位。

如果应用程序执行若干长查询,且每个长查询都包含 ORDER BY 或 GROUP BY 子句,那么您有时可以通过添加无需排序即能生成这些序列的索引来提高性能。例如,以下查询在 ORER BY 子句中按不同方向对每个列进行排序:
SELECT * FROM t1 ORDER BY a, b DESC;

要在对列 a 进行升序排序并对列 b 进行降序排序时避免使用临时表,您必须对 (a, b DESC) 或 (a DESC, b) 创建组合索引。由于数据库服务器具有双向遍历能力,您只需创建这些索引其中一个。 有关双向遍历的更多信息,请参阅 GBase 8s SQL 指南:语法

另一方面,当满足以下条件时,执行表扫描并对结果进行排序的成本要比使用组合索引低。