本文介绍了在SELECT语句中使用列存索引功能的限制条件。
SELECT语句限制
只支持在SELECT语句中使用列存索引。以下SELECT语句除外:
含锁操作的SELECT语句。如:
SELECT ... FOR [UPDATE | SHARE] ...
。含frame聚合函数的SELECT语句。如:
SELECT time, subject, val, SUM(val) OVER ( PARTITION BY subject ORDER BY time ROWS UNBOUNDED PRECEDING --- window function 中的 frame 定义,IMCI 不支持 ) AS running_total FROM observations;
子查询出现在GROUP BY clause 中的SELECT语句。如:
SELECT SUM(a) FROM t1 GROUP BY (SELECT ... FROM ...) as some_subquery;
子查询出现在ORDER BY表达式中的SELECT语句。如:
SELECT a FROM t1 ORDER BY (SELECT ... FROM ...) as some_subquery;
子查询中的关联项出现在join condition中的SELECT语句。如:
WHERE t1.a in (SELECT t2.a FROM t2 INNER JOIN t3 on t2.a = t3.a AND t2.b > t1.b);
子查询中含有window function,且关联项在HAVING条件中的SELECT语句。
子查询中含有UNION,且关联项出现在UNION的子查询中的SELECT语句。
表达式限制
如果SELECT语句中含有任何一个不支持使用列存索引的表达式,则整条SELECT语句都不支持列存索引功能。
比较类表达式
表达式 | 是否支持使用列存索引功能 |
SOUNDS LIKE | 不支持 |
BETWEEN...AND... | 支持 说明 当 |
GREATEST() | 支持 说明 当入参分别包含TIME类型和字符串类型时,比较结果可能会与不使用列存索引的结果存在差异。 |
IN() | 支持 说明 当 |
LEAST() | 支持 说明 当入参分别包含TIME类型和字符串类型时,比较结果可能会与不使用列存索引的结果存在差异。 |
NOT BETWEEN...AND... | 支持 说明 当 |
字符串类表达式
表达式 | 是否支持使用列存索引功能 |
SOUNDEX() | 不支持 |
SOUNDS LIKE | 不支持 |
MATCH | 不支持 |
LOAD_FILE() | 不支持 |
TIMESTAMP() | 支持 说明 使用列存索引功能时,只支持传入一个参数,不支持传入两个参数。 |
聚合函数类表达式
表达式 | 是否支持使用列存索引功能 |
JSON_ARRAYAGG() | 不支持 |
JSON_OBJECTAGG() | 不支持 |
窗口函数类表达式
表达式 | 是否支持使用列存索引功能 |
FIRST_VALUE() | 不支持 |
NTH_VALUE() | 不支持 |
LAST_VALUE() | 不支持 |
加密与压缩类表达式
表达式 | 是否支持使用列存索引功能 |
AES_DECRYPT() | 不支持 |
AES_ENCRYPT() | 不支持 |
COMPRESS() | 不支持 |
RANDOM_BYTES() | 不支持 |
STATEMENT_DIGEST() | 不支持 |
STATEMENT_DIGEST_TEXT() | 不支持 |
UNCOMPRESS() | 不支持 |
UNCOMPRESSED_LENGTH() | 不支持 |
VALIDATE_PASSWORD_STRENGTH() | 不支持 |
JSON函数
函数 | 是否支持使用列存索引功能 |
JSON_ARRAY() | 不支持 |
JSON_ARRAY_APPEND() | 不支持 |
JSON_ARRAY_INSERT() | 不支持 |
JSON_CONTAINS_PATH() | 不支持 |
JSON_INSERT() | 不支持 |
JSON_MERGE() | 不支持 |
JSON_MERGE_PATCH() | 不支持 |
JSON_MERGE_PRESERVE() | 不支持 |
JSON_OBJECT() | 不支持 |
JSON_OVERLAPS() | 不支持 |
JSON_REPLACE() | 不支持 |
JSON_SCHEMA_VALID() | 不支持 |
JSON_SCHEMA_VALIDATION_REPORT() | 不支持 |
JSON_SEARCH() | 不支持 |
JSON_SET() | 不支持 |
JSON_STORAGE_FREE() | 不支持 |
JSON_STORAGE_SIZE() | 不支持 |
JSON_VALUE() | 不支持 |
MEMBER OF() | 不支持 |
Spatial函数
函数 | 是否支持使用列存索引功能 |
ST_AsGeoJSON() | 不支持 |
ST_Buffer() | 不支持 |
ST_Buffer_Strategy() | 不支持 |
ST_Centroid() | 不支持 |
ST_Collect() | 不支持 |
ST_ConvexHull() | 不支持 |
ST_EndPoint() | 不支持 |
ST_ExteriorRing() | 不支持 |
ST_FrechetDistance() | 不支持 |
ST_GeoHash() | 不支持 |
ST_GeometryN() | 不支持 |
ST_GeometryType() | 不支持 |
ST_GeomFromGeoJSON() | 不支持 |
ST_HausdorffDistance() | 不支持 |
ST_InteriorRingN() | 不支持 |
ST_Intersection() | 不支持 |
ST_IsClosed() | 不支持 |
ST_IsEmpty() | 不支持 |
ST_IsSimple() | 不支持 |
ST_IsValid() | 不支持 |
ST_LatFromGeoHash() | 不支持 |
ST_LineInterpolatePoint() | 不支持 |
ST_LineInterpolatePoints() | 不支持 |
ST_LongFromGeoHash() | 不支持 |
ST_NumGeometries() | 不支持 |
ST_NumInteriorRing() | 不支持 |
ST_NumInteriorRings() | 不支持 |
ST_NumPoints() | 不支持 |
ST_PointAtDistance() | 不支持 |
ST_PointFromGeoHash() | 不支持 |
ST_PointN() | 不支持 |
ST_StartPoint() | 不支持 |
ST_SwapXY() | 不支持 |