多元索引提供了条件过滤、聚合、排序等功能,在创建多元索引后,使用SQL查询时,系统能够充分利用多元索引的计算能力,将部分SQL计算任务下推到多元索引执行,避免全表扫描,提高计算效率。

前提条件

已创建多元索引。具体操作,请参见创建多元索引

使用场景

如果多元索引包含SQL中涉及的数据列,则SQL引擎会通过多元索引读取数据并下推多元索引支持的算子。例如有一张表exampletable有a, b, c, d四列,多元索引中包含了b, c, d三列并均建立了索引,只有当SQL语句中只涉及b, c, d中的数据列时,才会多元索引读取数据。

SELECT a, b, c, d FROM exampletable; /* 多元索引不包含a,b,c,d,扫描全表读取数据,不支持算子下推 */
SELECT b, c, d FROM exampletable;    /* 多元索引包含b,c,d,通过多元索引读取数据,支持算子下推 */

支持下推的算子

算子类型 下推算子 下推限制
逻辑运算符 AND、OR 不支持NOT算子下推。
关系运算符 =、!=、<、<=、>、>=、BETWEEN ... AND ... 只有数据列和常数的比较才支持算子下推,不支持数据列和数据列比较的算子下推。
SELECT * FROM exampletable WHERE a > 1;  /* 数据列和常数比较,支持算子下推 */
SELECT * FROM exampletable WHERE a > b;  /* 数据列和数据列比较,不支持算子下推 */
聚合函数
  • 基础聚合:MIN、MAX、COUNT、AVG、SUM、ANY_VALUE
  • 去重聚合:COUNT(DISTINCT col_name)
  • 分组函数:GROUP BY col_name
聚合函数可以对全部数据或者GROUP BY分组中的数据进行聚合,只有聚合函数支持下推并且函数参数为数据列时才支持算子下推。
SELECT COUNT(*) FROM exampletable;           /* 特殊用法COUNT(*),支持算子下推 */
SELECT SUM(a) FROM exampletable;             /* 参数为数据列,支持算子下推 */
SELECT a, b FROM exampletable GROUP BY a, b; /* 按照数据列分组,支持算子下推 */
SELECT a FROM exampletable GROUP BY a+1;     /* 按照表达式分组,不支持算子下推 */
SELECT SUM(a+b) FROM exampletable;           /* 参数为表达式,不支持算子下推 */
LIMIT
  • LIMIT row_count
  • ORDER BY col_name LIMIT row_count
ORDER BY的参数为数据列时才支持算子下推。
SELECT * FROM exampletable ORDER BY a LIMIT 1;     /* 按照数据列排序,支持算子下推 */
SELECT * FROM exampletable ORDER BY a, b LIMIT 1;  /* 按照数据列排序,支持算子下推 */
SELECT * FROM exampletable ORDER BY a+1 LIMIT 1;   /* 按照表达式排序,不支持算子下推 */