Un index est une structure de données qui permet d'accélérer les recherches dans une table en associant à une clé d'index (la liste des attributs indexés) l'emplacement physique de l'enregistrement sur le disque.
Les accès effectuées sur un index peuvent donc se faire sur des structures optimisées pour la recherche (liste triée, B-tree...) au lieu de se faire par parcours séquentiel et intégral des enregistrements.
Les index doivent être utilisés sur les attributs :
souvent mobilisés dans une restriction (donc une jointure)
très discriminés (c'est à dire pour lesquels peu d'enregistrements ont les mêmes valeurs)
rarement modifiés
Les index diminuent les performances en mise à jour (puisqu'il faut mettre à jour les index en même temps que les données).
Les index ajoutent du volume à la base de données et leur volume peut devenir non négligeable.
CREATE INDEX nom_index ON nom_table (NomColonneClé1, NomColonneClé2, ...);
La plupart des SGBD créent un index pour chaque clé (primaire ou candidate). En effet la vérification de la contrainte d'unicité à chaque mise à jour des données justifie à elle seule la présence de l'index.
SELECT *
FROM T
WHERE ABS(X) > 100