mai
2012
Des indexes dans vos variables tables
Contrairement à ce que l’on peut encore trop fréquemment lire, il est tout à fait possible, avec un peu d’astuce de définir des indexes sur les variables tables.
Comment ?
L’astuce en question est de tirer profit de la possibilité de définir pour un ou plusieurs ensembles de colonnes une contrainte d’unicité. La contrainte d’unicité que ce soit pour des variables tables, des tables temporaires ou des tables normales provoque la construction d’un index dont les colonnes sont ordonnées dans le même ordre que celui présent dans la définition de la contrainte (ceci est important).
Illustrons cela par un exemple :
DECLARE @Mapping TABLE (
special BIT
, data1 VARCHAR(MAX)
, data2 VARCHAR(MAX)
, ID INT IDENTITY
, UNIQUE (special, ID)
)
Dans cet exemple, la contrainte d’unicité va causer la création d’un indexe [special, ID] (et en aucun cas [ID, special] qui serait pourtant forcément tout aussi unique). L’indexe ainsi crée, permettra de facilement faire des queries sur cette variable table en en filtrant le résultat selon la valeure du champ « special ».
L’unicité :
Bien sûr avant de définir une contrainte d’unicité il faut être certain de pouvoir la respecter, aussi dans vos tables temporaires, il n’existe pas toujours un combinaison de colonnes (comprenant celles pour lesquelles vous souhaitez construire un indexe) qui puissent respecter l’unicité. Sauf que rien ne vous empêche de rajouter un colonne supplémentaire qui fera apparaître une telle combinaison. Et cela est d’une simplicité enfantine puisque, comme vous l’aviez peut-être déjà constaté dans l’exemple, il suffit de rajouter une colonne (numérique) autoincrémenté à votre variable table dont la présence dans n’importe quelle combinaison de colonnes, garantira que cette combinaison respectera l’unicité (puisque cette colonne a elle seule la garanti déjà).
Conclusion :
Pour créer un indexe sur une table variable, vous devez définir que les ensembles ordonnées des colonnes qui composent ces indexes ont des valeurs uniques et pour permettre cela, vous pouvez rajouter une colonne autoincrémentée qui terminera la définition de chacune de vos contrainte d’unicité.
UNIQUE ([colonne 1], [colonne 2], …, [colonne n], [Auto ID])
Commentaires récents
- Et si on se passait des clés étrangères ? dans
- Quand les fonctions tables surpassent les vues et CTE. dans
- Quelques choses à savoir sur les espaces en fin de chaîne dans
- Assigner des variables et renvoyer un résultat en une seule opération dans
- Quelques choses à savoir sur les espaces en fin de chaîne dans