La syntaxe d’utilisation de CREATE INDEX est la suivante :
CREATE [UNIQUE] [CLUSTEREDNONCLUSTERED] INDEX nom_index ON nom_table
( nom_colonne, nom_colonne… ) WITH options ON nom_groupe_de_fichier.
Un index CLUSTERED contient les données de la table. Par conséquent, il ne peut y avoir qu’un seul index Clustered par table. En contrepartie, Microsoft met en garde contre l’utilisation de cette structure quand les enregistrements sont de taille importante car on ne peut alors mettre que peu d’enregistrements dans un noeud de l’arbre, ce qui risque de faire perdre à l’index une partie de son efficacité.
Un index est performant pour la recherche sur
- une clef : SELECT * FROM Film WHERE Titre=’Gladiator’
- un intervalle : SELECT * FROM Film WHERE Annee BETWEEN 1999 AND 2001
- ou une partie de la clé : SELECT * FROM Film WHERE Titre LIKE ‘G%’
Les options :
PAD_INDEX : utilisé avec le paramètre FILL_FACTOR; indique qu’il faut laisser de l’espace dans les noeuds branches et pas seulement dans les noeuds feuilles.
FILL_FACTOR : spécifie le degre de remplissage de chaque noeud feuille; pourcentage compris entre 0 et 100. 0 est une valeur particulière, la gestion est laissée à sql server.
DROP_EXISTING : indique que si il existe deja un index portant ce nom, cet index sera supprimé puis recree avec la nouvelle définition.
ONLINE : commande de sql server 2005 enterprise , les tables sont accessibles en requete et modification durant les opérations d’indexation.
SORT_IN_TEMPDB : par default, OFF, les résultats des tris sont calculés dans la base courante. Sur ON, les résultats des tris sont stockées dans TEMPDB.
exemple :
CREATE CLUSTERED INDEX item_index ON INVENTORY(item) WITH ( PAD_INDEX=ON,FILLFACTOR=50 )