多元索引提供了条件过滤、聚合、排序等功能,在创建多元索引后,使用SQL查询时,系统能够充分利用多元索引的计算能力,将部分SQL计算任务下推到多元索引执行,避免全表扫描,从而提高计算效率。
关于多元索引的更多信息,请参见多元索引。
使用场景
如果多元索引包含SQL中涉及的数据列,则SQL引擎会通过多元索引读取数据并下推多元索引支持的算子。例如有一张表exampletable有a、b、c和d四列,多元索引中包含了a、b和c三列并均建立了索引,只有当SQL语句中只涉及a、b和c中的数据列时,才会通过多元索引读取数据。
SELECT a, b, c, d FROM exampletable; /* 多元索引不包含a,b,c,d,扫描全表读取数据,不支持算子下推 */
SELECT a, b, c FROM exampletable; /* 多元索引包含a,b,c,通过多元索引读取数据,支持算子下推 */
注意事项
如果SQL语句中的WHERE条件存在与实际字段类型不一致的表达式,则会导致这部分的表达式无法下推到多元索引,进而影响整体的SQL执行效率。
例如a、b的字段类型均为BIGINT,当使用的WHERE条件为 WHERE a = '123' and b = 234
时,由于a = '123'
存在隐式CAST操作将不能被下推到多元索引,只有b = 234
会被下推。如需实现完整的表达式下推,请将WHERE条件修改为 a = 123 and b = 234
。
前提条件
已创建多元索引。具体操作,请参见创建多元索引。
已创建映射关系。具体操作,请参见创建表的映射关系或创建多元索引的映射关系。
支持下推的算子
当前SQL语句中支持下推到多元索引执行的算子说明请参见下表。
算子类型 | 下推算子 | 下推限制 |
算子类型 | 下推算子 | 下推限制 |
逻辑运算符 | AND、OR | 不支持NOT算子下推。 |
关系运算符 | =、!=、<、<=、>、>=、BETWEEN ... AND ... | 只有数据列和常数的比较才支持算子下推,不支持数据列和数据列比较的算子下推。
|
聚合函数 |
| 聚合函数可以对全部数据或者GROUP BY分组中的数据进行聚合,只有聚合函数支持下推并且函数参数为数据列时才支持算子下推。
|
LIMIT |
| ORDER BY的参数为数据列时才支持算子下推。
|
- 本页导读 (1)
- 使用场景
- 注意事项
- 前提条件
- 支持下推的算子