FirebirdSQL logo

Exemples

Example 1. Création d’un index
CREATE INDEX IDX_UPDATER ON SALARY_HISTORY (UPDATER_ID);
Example 2. Création d’un index avec des clés triées par ordre décroissant
CREATE DESCENDING INDEX IDX_CHANGE
ON SALARY_HISTORY (CHANGE_DATE);
Example 3. Création d’un index multi-segment
CREATE INDEX IDX_SALESTAT ON SALES (ORDER_STATUS, PAID);
Example 4. Création d’un index qui n’autorise pas les valeurs dupliquées
CREATE UNIQUE INDEX UNQ_COUNTRY_NAME ON COUNTRY (NAME);
Example 5. Création d’un indice calculable
CREATE INDEX IDX_NAME_UPPER ON PERSONS
COMPUTED BY (UPPER (NAME));

Un tel index peut être utilisé pour des recherches sans distinction de casse.

SELECT *
FROM PERSONS
WHERE UPPER(NAME) STARTING WITH UPPER('Iv');
CREATE INDEX IT1_COL ON T1 (COL) WHERE COL < 100;

Si la clause WHERE de la sélection est exactement la même expression que celle spécifiée dans l’index, l’index sera utilisé, sinon non.

SELECT * FROM T1 WHERE COL < 100;

-- PLAN (T1 INDEX (IT1_COL))

L’exemple suivant crée un index qui n’inclura pas les valeurs NULL.

CREATE INDEX IT1_COL2 ON T1 (COL) WHERE COL IS NOT NULL;

Cet index peut être utilisé par presque tous les prédicats de recherche, à l’exception de IS NULL et IS NOT DISTINCT FROM, puisque les autres expressions ignorent NULL.

SELECT * FROM T1 WHERE COL > 100;

-- PLAN (T1 INDEX IT1_COL2)

Un index partiel peut être créé sur plusieurs valeurs de colonnes en les énumérant dans IN ou en combinant plusieurs expressions avec l’opérateur OR.

CREATE INDEX IT1_COL3 ON T1 (COL) WHERE COL = 1 OR COL = 2;
SELECT * FROM T1 WHERE COL = 2;

-- PLAN (T1 INDEX IT1_COL3)
Voir aussi :

ALTER INDEX, DROP INDEX.

ALTER INDEX

Objectif

Pour faire passer l’index à l’état actif/inactif, reconstruisez l’index.

Disponible en

DSQL, ESQL.

Syntaxe
ALTER INDEX indexname {ACTIVE | INACTIVE};
Table 1. Paramètres de la commande ALTER INDEX.
Paramètre Description

indexname

Nom de l’index.

La commande ALTER INDEX met l’index dans l’état actif/inactif.Il n’est pas possible de modifier la structure et l’ordre de tri des clés.

INACTIVE

En sélectionnant "INACTIF", l’index passe de l’état actif à l’état inactif. La mise en état d’inactivité d’un index est similaire en action à la commande DROP INDEX, sauf que la définition de l’index est stockée dans la base de données. Un index participant à une contrainte ne peut pas être rendu inactif.

L’index actif ne peut être rendu inactif que si aucune requête n’utilise cet index, sinon l’erreur object in use est retournée.

L’activation d’un index inactif est également sans danger.Cependant, si des transactions actives modifient la table, la transaction contenant l’instruction ALTER INDEX échouera si elle a l’attribut NO WAIT.Si la transaction est en mode WAIT, elle attendra que les transactions concurrentes se terminent.

D’un autre côté, si notre instruction ALTER INDEX commence à reconstruire l’index à COMMIT, alors les autres transactions modifiant cette table échoueront ou attendront en fonction de leurs attributs WAIT/NO WAIT.La même situation se produira lors de l’exécution de CREATE INDEX.

Tip

Mettre un index dans un état inactif peut être utile lors de l’insertion, de la modification ou de la suppression en masse d’enregistrements de la table pour laquelle l’index est construit.

ACTIVE

En sélectionnant l’alternative ACTIF, l’index passe de l’état inactif à l’état actif. Lorsque l’index est déplacé d’inactif à actif — l’index est reconstruit.

Tip

Même si l’index est dans l’état actif, la commande ALTER INDEX …​ ACTIVE' reconstruit toujours l’index.Cette commande peut donc être utilisée dans le cadre de la maintenance de la base de données pour reconstruire les index créés automatiquement pour les contraintes.`PRIMARY KEY, FOREIGN KEY, UNIQUE pour lesquels le ALTER INDEX …​ INACTIVE n’est pas possible.