La fonctionnalité In-Memory Column Index (IMCI) accélère les requêtes de traitement analytique (AP) dans PolarDB for MySQL. Avant d'activer IMCI, vérifiez les limites suivantes pour garantir la compatibilité de votre environnement et de vos requêtes.
Limites générales
| Contrainte | Détails |
|---|---|
| Moteur de stockage | InnoDB uniquement. Les index columnstore ne sont pas pris en charge pour les tables utilisant d'autres moteurs de stockage. |
| Tables temporaires | Non prises en charge. IMCI n'accélère pas les requêtes sur les tables temporaires. |
| Colonnes virtuelles | Prise en charge si deux conditions sont remplies : imci_enable_virtual_column est défini sur ON et order_key n'est pas spécifié lors de la création de l'index. |
| Colonnes virtuelles — Type Spatial | Non prise en charge. Vous ne pouvez pas créer d'index columnstore sur une colonne virtuelle de type Spatial. |
| Multi-master Cluster (Limitless) Edition | Définissez le paramètre de cluster loose_polar_enable_imci_with_mm sur ON, puis ajoutez un nœud global en lecture seule pour IMCI. |
Le paramètre imci_enable_virtual_column s'applique au niveau SESSION et ne peut pas être modifié depuis la console.
Limites des instructions SELECT
Les index columnstore accélèrent exclusivement les requêtes SELECT. Si une requête contient l'une des structures suivantes, l'index columnstore ne peut pas l'accélérer et l'exécution bascule vers le stockage ligne :
Lectures avec verrouillage :
SELECT ... FOR UPDATEouSELECT ... FOR SHARE-
Fonction fenêtrée avec définition de cadre, par exemple
ROWS UNBOUNDED PRECEDINGdans la clauseOVER():SELECT time, subject, val, SUM(val) OVER ( PARTITION BY subject ORDER BY time ROWS UNBOUNDED PRECEDING -- Frame definition not supported by IMCI ) AS running_total FROM observations; Sous-requête dans la clause
GROUP BY, par exempleSELECT SUM(a) FROM t1 GROUP BY (SELECT ... FROM ...) as some_subquerySous-requête dans une expression
ORDER BY, par exempleSELECT a FROM t1 ORDER BY (SELECT ... FROM ...) as some_subquerySous-requête corrélée dans la condition
ONd'une jointureJOIN, par exempleWHERE t1.a in (SELECT t2.a FROM t2 INNER JOIN t3 on t2.a = t3.a AND t2.b > t1.b)Sous-requête contenant une fonction fenêtrée où un élément corrélé apparaît dans la condition
HAVINGSous-requête contenant une clause
UNIONoù un élément corrélé figure dans l'une des sous-requêtes duUNION
Limites relatives aux expressions et fonctions
Si une instruction SELECT inclut une expression ou une fonction non prise en charge, l'intégralité de la requête bascule vers une exécution via le stockage ligne.
Expressions de comparaison
| Expression | Prise en charge | Notes |
|---|---|---|
BETWEEN ... AND ... |
Oui | Si b et c ont des types de données différents dans a BETWEEN b AND c, les résultats peuvent différer de ceux du stockage ligne. |
NOT BETWEEN ... AND ... |
Oui | Si b et c ont des types de données différents dans a NOT BETWEEN b AND c, les résultats peuvent différer de ceux du stockage ligne. |
GREATEST() |
Oui | Si les paramètres d'entrée combinent un type TIME et un type chaîne, les résultats peuvent différer de ceux du stockage ligne. |
IN() |
Oui | Si expr0, expr1, ... ont des types de données différents dans IN(expr0, expr1, ...), les résultats peuvent différer de ceux du stockage ligne. |
LEAST() |
Oui | Si les paramètres d'entrée combinent un type TIME et un type chaîne, les résultats peuvent différer de ceux du stockage ligne. |
SOUNDS LIKE |
Non | — |
Expressions de chaîne
| Expression | Prise en charge | Notes |
|---|---|---|
MATCH |
Oui | Les modes BOOLEAN MODE et NATURAL LANGUAGE MODE sont pris en charge. |
TIMESTAMP() |
Oui | Seule la forme à un paramètre est prise en charge. La forme à deux paramètres n'est pas prise en charge. |
SOUNDEX() |
Non | — |
LOAD_FILE() |
Non | — |
Expressions et fonctions non prises en charge
Les index columnstore ne prennent pas en charge les expressions et fonctions suivantes.
Chiffrement et compression
AES_DECRYPT(), AES_ENCRYPT(), COMPRESS(), RANDOM_BYTES(), STATEMENT_DIGEST(), STATEMENT_DIGEST_TEXT(), UNCOMPRESS(), UNCOMPRESSED_LENGTH(), VALIDATE_PASSWORD_STRENGTH()
Fonctions JSON
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()
Fonctions spatiales
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()