本文介紹了在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() | 不支援 |