使用限制

本文介绍了在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...

支持

说明

a BETWEEN b AND cbc的数据类型不同时,会存在兼容性问题,可能会导致查询结果与不使用列存索引的查询结果不一致问题。

GREATEST()

支持

说明

当入参分别包含TIME类型和字符串类型时,比较结果可能会与不使用列存索引的结果存在差异。

IN()

支持

说明

IN(expr0, expr1, ...)中的expr0expr1 ... 数据类型不同时,会存在兼容性问题,可能会导致查询结果与不使用列存索引的查询结果不一致问题。

LEAST()

支持

说明

当入参分别包含TIME类型和字符串类型时,比较结果可能会与不使用列存索引的结果存在差异。

NOT BETWEEN...AND...

支持

说明

a NOT BETWEEN b AND cbc的数据类型不同时,会存在兼容性问题,可能会导致查询结果与不使用列存索引的查询结果不一致问题。

字符串类表达式

表达式

是否支持使用列存索引功能

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()

不支持