全部產品
Search
文件中心

PolarDB:使用限制

更新時間:Dec 20, 2025

PolarDB MySQL版的列存索引(IMCI)功能旨在顯著加速您的分析型(AP)查詢。為確保您的SQL查詢能被列存索引正確加速並返回預期結果,請在使用該功能前詳細瞭解其支援的範圍和限制條件。

通用限制

在使用列存索引前,請確保您的叢集環境和表結構滿足以下基本要求:

  • 儲存引擎:僅支援為InnoDB儲存引擎的表建立列存索引。

  • 暫存資料表:不支援對暫存資料表(Temporary Table)使用列存索引進行查詢加速。

  • 虛擬列:支援對虛擬列(Virtual Column)建立列存索引,但需同時滿足以下條件:

    • 修改叢集參數imci_enable_virtual_columnON

      說明

      當前參數為SESSION層級,暫不支援在控制台上進行設定修改。

    • 建立列存索引時未指定order_key

  • 虛擬列類型:不支援為地理資訊(Spatial)類型的虛擬列建立列存索引。

  • 多主叢集(Limitless):需要先修改叢集參數loose_polar_enable_imci_with_mmON後,才可添加全域列存索引唯讀節點並使用列存索引功能。

SELECT語句限制

列存索引僅用於加速SELECT查詢。如果查詢語句中包含以下任何一種結構,整個查詢將無法使用列存索引進行加速,並退化為行存執行:

  • 包含加鎖讀的SELECT語句,例如,SELECT ... FOR UPDATESELECT ... FOR SHARE

  • 包含Frame定義的視窗函數(Window Function)的SELECT語句。例如,在OVER()子句中使用了ROWS UNBOUNDED PRECEDING

    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子句中的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;

  • 子查詢的關聯項(Correlated Subquery)出現在JOINON條件中的SELECT語句。例如,WHERE t1.a in (SELECT t2.a FROM t2 INNER JOIN t3 on t2.a = t3.a AND t2.b > t1.b);

  • 子查詢中包含視窗函數,且其關聯項出現在HAVING條件中的SELECT語句。

  • 子查詢中包含UNION,且其關聯項出現在UNION的某個子查詢中的SELECT語句。

運算式與函數限制

如果SELECT語句中包含了任何不被支援的運算式或函數,整個查詢將退化為行存執行。

比較類運算式

運算式

是否支援列存索引

說明

BETWEEN ... AND ...

支援

a BETWEEN b AND cbc的資料類型不同時,會存在相容性問題,可能會導致查詢結果與不使用列存索引的查詢結果不一致的問題。

NOT BETWEEN ... AND ...

支援

a NOT BETWEEN b AND cbc的資料類型不同時,會存在相容性問題,可能會導致查詢結果與不使用列存索引的查詢結果不一致的問題。

GREATEST()

支援

當入參分別包含TIME類型和字串類型時,比較結果可能會與不使用列存索引的結果存在差異。

IN()

支援

IN(expr0, expr1, ...)中的expr0,expr1,...資料類型不同時,會存在相容性問題,可能會導致查詢結果與不使用列存索引的查詢結果不一致的問題。

LEAST()

支援

當入參分別包含TIME類型和字串類型時,比較結果可能會與不使用列存索引的結果存在差異。

SOUNDS LIKE

不支援

-

字串類運算式

運算式

是否支援列存索引

說明

SOUNDEX()

不支援

-

MATCH

支援

支援 BOOLEAN MODE 與 NATURAL LANGUAGE MODE;

LOAD_FILE()

不支援

-

TIMESTAMP()

支援

使用列存索引功能時,只支援傳入一個參數,不支援傳入兩個參數。

加密與壓縮類運算式

運算式

是否支援列存索引

AES_DECRYPT()

不支援

AES_ENCRYPT()

不支援

COMPRESS()

不支援

RANDOM_BYTES()

不支援

STATEMENT_DIGEST()

不支援

STATEMENT_DIGEST_TEXT()

不支援

UNCOMPRESS()

不支援

UNCOMPRESSED_LENGTH()

不支援

VALIDATE_PASSWORD_STRENGTH()

不支援

JSON函數

函數

是否支援列存索引

JSON_ARRAY_APPEND()

不支援

JSON_ARRAY_INSERT()

不支援

JSON_CONTAINS_PATH()

不支援

JSON_INSERT()

不支援

JSON_MERGE()

不支援

JSON_MERGE_PATCH()

不支援

JSON_MERGE_PRESERVE()

不支援

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

不支援