CREATE INDEX

Crée un nouvel index secondaire dans une table hybride existante et remplit l’index avec des données.

La création d’un index est une opération en ligne (non bloquante). La table hybride restera disponible pour les instructions SELECT et DML pendant la construction de l’index.

Voir aussi :

DROP INDEX , SHOW INDEXES , CREATE HYBRID TABLE , DROP TABLE , DESCRIBE TABLE , SHOW HYBRID TABLES

Syntaxe

CREATE [ OR REPLACE ] INDEX [ IF NOT EXISTS ] <index_name>
  ( <col_name>
      [ , <col_name> ] ) ON <table_name>
Copy

Paramètres

index_name

Spécifie l’identificateur du nouvel index. Le nom doit être unique pour la table hybride pour laquelle l’index est créé. Aucun autre index secondaire portant le même nom ou sur le même ensemble ordonné de colonnes ne peut exister sur la table hybride.

table_name

Spécifie le nom d’une table hybride existante qui contiendra le nouvel index.

col_name

Spécifie le nom d’une colonne existante de la table hybride. Toutes les exigences relatives aux colonnes d’index définies lors de la création de la table s’appliquent aux identificateurs de colonnes.

Notes sur l’utilisation

  • La commande CREATE INDEX ne peut pas être utilisée pour ajouter une contrainte de clé étrangère, primaire ou unique.

  • Pour créer un index, vous devez utiliser un rôle qui dispose du privilège OWNERSHIP sur la table hybride.

  • Vous devez choisir un nom unique pour chaque nouvel index d’une table hybride donnée.

  • Lorsque vous choisissez les colonnes pour le nouvel index, notez qu’une table hybride ne peut pas contenir deux index secondaires définis sur le même ensemble ordonné de colonnes.

  • Certains types de colonnes (par exemple, VARIANT) ne sont pas autorisés dans un index secondaire.

  • La création d’un nouvel index ne bloque pas simultanément d’autres charges de travail. La table hybride est disponible pour les instructions SELECT et DML simultanées.

  • Une seule opération active de construction d’index par table hybride est autorisée à tout moment.

  • Vous pouvez suivre la progression de la création d’un index en utilisant SHOW INDEXES. La colonne STATUS peut prendre les valeurs suivantes :

    • ACTIVE : l’index est complet et peut être utilisé pour récupérer les données.

    • SUSPENDED : l’index est uniquement mis à jour et n’est pas utilisé pour récupérer des données.

    • BUILD FAILURE : une erreur s’est produite dans le processus de construction de l’index. Vous devez supprimer et recréer l’index.

    • BUILD IN PROGRESS : l’index est en cours de construction et n’est pas utilisé pour récupérer les données.

  • Vous pouvez reconstruire un index non actif, dont le statut est SUSPENDED, BUILD FAILURE ou BUILD IN PROGRESS, en utilisant DROP INDEX et CREATE INDEX.

  • Si vous souhaitez supprimer une colonne qui fait partie d’un index en cours de construction, vous devez d’abord arrêter la construction de l’index en supprimant l’index, puis la colonne. Si vous essayez de supprimer la colonne avant de supprimer l’index, vous recevrez le message d’erreur suivant : Column '<col_name>' cannot be dropped because it is used by index '<index-name>'.

  • La construction de l’index en ligne ne progressera pas tant que toutes les transactions actives avec des DMLs sur la même table au moment où l’instruction CREATE INDEX a été émise ne seront pas terminées. Si l’une de ces transactions reste inactive pendant plus de 5 minutes, elle sera interrompue par défaut. Voir Transactions.

  • Pendant le processus de construction de l’index, tout DML effectue ses écritures dans le nouvel index, mais n’utilise pas l’index pour récupérer des données.

  • Un petit nombre de DMLs concurrents, qui ont commencé l’exécution après la fin de la commande CREATE INDEX, peuvent échouer et renvoyer cette erreur : DML n'était pas au courant du DDL concurrent. Veuillez réessayer cette requête.

  • Si les instructions DML interrompues font partie d’une transaction à plusieurs instructions, la transaction ne sera annulée que si le paramètre TRANSACTION_ABORT_ON_ERROR est défini sur TRUE.

  • Un index nouvellement créé ne sera utilisé pour récupérer des données que lorsque le processus de création de l’index se terminera avec succès et que le statut de l’index sera ACTIVE.

Exemples

Les exemples suivants supposent que vous avez déjà créé une table hybride et qu’elle contient quelques enregistrements.

CREATE OR REPLACE HYBRID TABLE mytable (
  pk INT PRIMARY KEY,
  val INT
  val2 INT
);

INSERT INTO mytable SELECT seq, seq+100, seq+200
  FROM (SELECT seq8() seq FROM TABLE(GENERATOR(rowcount => 100)) v);
Copy

Vous pouvez créer un index sur la table en procédant comme suit :

CREATE OR REPLACE INDEX vidx (val) ON mytable;
Copy

La commande renvoie ce message : BUILD IN PROGRESS L'index est en cours de construction et enregistrera les modifications de DML concurrentes dans la table de base. L'index ne sera pas utilisé tant que sa construction ne sera pas terminée.

Si un échec survient alors que la construction de l’index est en cours, la commande SHOW INDEXES indiquera que l’opération a échoué : La construction de l'index BUILD FAILURE a échoué. Veuillez supprimer l'index et le recréer.

Si vous décidez d’arrêter la construction de l’index, vous pouvez utiliser la commande DROP INDEX :

DROP INDEX vid ON mytable;
Copy
+-------------------------------------+
| status                              |
|-------------------------------------|
| Statement executed successfully.    |
+-------------------------------------+