Restrictions sur les indices
La longueur maximale de la clé d’indexation est limitée à 1/4 de la taille de la page.
La longueur maximale de la clé d’indexation est limitée à 1/4 de la taille de la page.
La longueur maximale d’une chaîne indexée est inférieure de 9 octets à la longueur maximale de la clé.La longueur maximale de la chaîne indexée dépend de la taille de la page et du jeu de caractères.
Taille de la page |
Longueur maximale de la chaîne indexée pour le jeu de caractères, octet/symbole |
||||
---|---|---|---|---|---|
1 |
2 |
3 |
4 |
6 |
|
4096 |
1015 |
507 |
338 |
253 |
169 |
8192 |
2039 |
1019 |
679 |
509 |
339 |
16384 |
4087 |
2043 |
1362 |
1021 |
681 |
32768 |
8183 |
4091 |
2727 |
2045 |
1363 |
Pour chaque table, le nombre maximal possible d’index est limité et dépend de la taille de la page et du nombre de colonnes dans l’index.
Taille de la page |
Nombre d’index en fonction du nombre de colonnes dans l’index |
||
---|---|---|---|
1 |
2 |
3 |
|
4096 |
203 |
145 |
113 |
8192 |
408 |
291 |
227 |
16384 |
818 |
584 |
454 |
32768 |
1637 |
1169 |
909 |
Exécuter l’opérateur CREATE INDEX
peut :
Le propriétaire de la table pour laquelle l’index est créé ;
Utilisateurs avec le privilège ALTER ANY TABLE
.
CREATE INDEX IDX_UPDATER ON SALARY_HISTORY (UPDATER_ID);
CREATE DESCENDING INDEX IDX_CHANGE
ON SALARY_HISTORY (CHANGE_DATE);
CREATE INDEX IDX_SALESTAT ON SALES (ORDER_STATUS, PAID);
CREATE UNIQUE INDEX UNQ_COUNTRY_NAME ON COUNTRY (NAME);
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)
ALTER INDEX
Pour faire passer l’index à l’état actif/inactif, reconstruisez l’index.
DSQL, ESQL.
ALTER INDEX indexname {ACTIVE | INACTIVE};
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
pour les index de restrictionLa conversion forcée des index créés pour les contraintes PRIMARY KEY
, FOREIGN KEY
et UNIQUE
n’est pas autorisée.Cependant, l’exécution de la commande ALTER INDEX … INACTIVE
fonctionne aussi bien pour les index de contraintes que les autres outils pour les autres index.
L’opérateur ALTER INDEX
peut être exécuté :
Le propriétaire de la table pour laquelle l’index est construit ;
Utilisateurs avec le privilège ALTER ANY TABLE
.
ALTER INDEX IDX_UPDATER INACTIVE;
ALTER INDEX IDX_UPDATER ACTIVE;
DROP INDEX
Pour supprimer un index de la base de données.
DSQL, ESQL.
DROP INDEX indexname
Paramètre | Description |
---|---|
indexname |
Nom de l’index |
L’instruction DROP INDEX
supprime un index existant de la base de données.S’il existe des dépendances pour un index existant (s’il est utilisé dans une contrainte), la suppression ne sera pas effectuée.
La commande DROP INDEX
peut être exécutée :
Le propriétaire de la table pour laquelle l’index est construit ;
Utilisateurs avec le privilège ALTER ANY TABLE
.
DROP INDEX IDX_UPDATER;
SET STATISTICS
Nouveau calcul de la sélectivité de l’indice.
DSQL, ESQL.
SET STATISTICS INDEX indexname
Paramètres pour la commande SET STATISTICS
.
Paramètre | Description |
---|---|
indexname |
Nom de l’index. |
L’opérateur SET STATISTICS
recalcule la valeur de sélectivité pour l’index spécifié..
La sélectivité de l’index est une estimation du nombre de lignes qui peuvent être sélectionnées lors de la recherche de chaque valeur d’index.Un index unique a une sélectivité maximale, car il ne peut sélectionner plus d’une ligne pour chaque valeur de clé d’index.La pertinence de la sélectivité de l’index est importante pour sélectionner le plan d’exécution de requête le plus optimal pour l’optimiseur.
La sélectivité de l’index peut devoir être recalculée après une insertion, une modification ou une suppression massive d’un grand nombre d’enregistrements dans une table, car elle devient non pertinente.
Note
|
Notez que dans Firebird les statistiques de l’index ne sont pas automatiquement recalculées après des changements massifs de données, ni dans aucune autre condition.Lorsqu’un index est créé ( |
Le recalcul de la sélectivité de l’indice peut être effectué sous un parallélisme élevé sans risque de l’endommager.Cependant, il faut garder à l’esprit qu’avec un parallélisme élevé, les statistiques calculées peuvent devenir obsolètes dès que l’exécution de l’opérateur est terminée. SET STATISTICS
.
L’instruction SET STATISTICS
peut être exécutée :
Le propriétaire de la table pour laquelle l’index est construit ;
Utilisateurs avec le privilège ALTER ANY TABLE
.
SET STATISTICS INDEX IDX_UPDATER;