Appelez dbms_imci.columnar_advise() ou dbms_imci.columnar_advise_by_columns() pour générer l'instruction DDL nécessaire à la création d'un In-Memory Columnar Index (IMCI) pour une requête donnée. Ces procédures stockées retournent uniquement des instructions DDL sans les exécuter. Après exécution du code DDL obtenu, répétez l'opération si certaines colonnes restent invalides, jusqu'à ce que toutes les colonnes impliquées dans la requête disposent d'un IMCI valide.
Prérequis
Avant de commencer, assurez-vous de disposer des éléments suivants :
Un cluster PolarDB for MySQL 8.0.1 avec une version de révision 8.0.1.1.30 ou ultérieure
L'autorisation SELECT sur la table cible
Procédures
Choisissez la procédure selon l'étendue souhaitée pour l'application de l'IMCI :
| Procédure | Portée | Cas d'usage |
|---|---|---|
dbms_imci.columnar_advise() |
Toutes les colonnes des tables interrogées | Couverture columnar complète requise sur chaque table concernée par la requête |
dbms_imci.columnar_advise_by_columns() |
Uniquement les colonnes référencées dans la requête | IMCI ciblé, limité aux colonnes effectivement utilisées par la requête |
Syntaxe
Pour obtenir l'instruction DDL permettant de créer un IMCI sur toutes les colonnes des tables interrogées :
CALL dbms_imci.columnar_advise('<query_string>');
Pour obtenir l'instruction DDL permettant de créer un IMCI uniquement sur les colonnes spécifiques référencées dans la requête :
CALL dbms_imci.columnar_advise_by_columns('<query_string>');
Paramètres
| Paramètre | Type | Description |
|---|---|---|
query_string |
Chaîne littérale | Instruction SQL à analyser. Doit être une instruction SELECT valide ; les instructions INSERT, UPDATE et DELETE ne sont pas prises en charge. Ce paramètre exige une chaîne littérale, et non une variable ou un résultat de requête. Si l'instruction SELECT fait référence à une colonne inexistante, une erreur est retournée. |
Exemples
Les exemples suivants utilisent deux tables, t1 et t2, dans la base de données test.
Préparation des tables d'exemple :
USE test;
CREATE TABLE t1 (a INT, b INT) ENGINE = InnoDB;
CREATE TABLE t2 (a INT, b INT) ENGINE = InnoDB;
Obtenir le DDL pour toutes les colonnes des tables interrogées
Appelez dbms_imci.columnar_advise() avec la requête cible :
CALL dbms_imci.columnar_advise('SELECT COUNT(t1.a) FROM t1 INNER JOIN t2 ON t1.a = t2.a GROUP BY t1.b');
Exemple de sortie :
+-------------------------------------------+
| DDL_STATEMENT |
+-------------------------------------------+
| ALTER TABLE test.t1 COMMENT='COLUMNAR=1'; |
| ALTER TABLE test.t2 COMMENT='COLUMNAR=1'; |
+-------------------------------------------+
2 rows in set (0.00 sec)
La sortie contient une instruction DDL par table. Chaque instruction active l'IMCI pour toutes les colonnes de la table concernée. Exécutez ces instructions pour créer les IMCI.
Obtenir le DDL pour les colonnes spécifiques référencées dans la requête
Appelez dbms_imci.columnar_advise_by_columns() avec la même requête :
CALL dbms_imci.columnar_advise_by_columns('SELECT COUNT(t1.a) FROM t1 INNER JOIN t2 ON t1.a = t2.a GROUP BY t1.b');
Exemple de sortie :
+-------------------------------------------------------------------------------------------------------------------------------------------+
| DDL_STATEMENT |
+-------------------------------------------------------------------------------------------------------------------------------------------+
| ALTER TABLE test.t1 MODIFY COLUMN a int(11) DEFAULT NULL COMMENT 'COLUMNAR=1', MODIFY COLUMN b int(11) DEFAULT NULL COMMENT 'COLUMNAR=1'; |
| ALTER TABLE test.t2 MODIFY COLUMN a int(11) DEFAULT NULL COMMENT 'COLUMNAR=1'; |
+-------------------------------------------------------------------------------------------------------------------------------------------+
2 rows in set (0.00 sec)
La requête ne référençant que t1.a, t1.b et t2.a, la sortie crée des IMCI uniquement pour ces trois colonnes. Exécutez ces instructions pour activer l'IMCI précisément sur les colonnes utilisées par la requête.
Itération jusqu'à validation de toutes les colonnes
Après l'exécution des instructions DDL, certaines colonnes peuvent encore présenter un statut IMCI invalide. Appelez à nouveau la même procédure stockée avec la même requête pour obtenir des instructions DDL mises à jour, puis exécutez-les. Répétez ce cycle jusqu'à ce que la procédure stockée ne retourne plus aucune instruction et que l'IMCI soit valide pour toutes les colonnes utilisées par la requête.