2009-04-12 9 views

Répondre

0

Le "besoin" est d'effectuer des recherches plus rapides de colonnes non incluses dans l'index clusterisé.

2

Pour des performances optimales, vous devez créer un index pour chaque combinaison utilisée dans vos requêtes. Par exemple si vous avez un select comme ça.

SELECT * 
FROM MyTable 
WHERE Col_1 = @SomeValue AND 
     Col_2 = @SomeOtherValue 

Ensuite, vous devriez faire un index clusterisé avec Col_1 et Col_2. D'autre part, si vous avez une requête supplémentaire qui ne regarde que un de la colonne comme:

SELECT * 
FROM MyTable 
WHERE Col_1 = @SomeValue 

alors vous devriez avoir un index avec juste la Col_1. Donc vous vous retrouvez avec deux index. Un avec Col_1 et Col_2 et un autre avec juste Col_1.

+0

Pas besoin de deux index dans ce cas - assez pour avoir un index sur Col_1 et Col_2. Le même index sera effectivement utilisé pour les valeurs de recherche Col_1 soit. – Arvo

0

Ne confondez pas les index cluster avec des index sur plusieurs colonnes. Ce n'est pas la même chose.

Here's Un article qui explique bien les index clusterisés et non clusterisés.

Dans le serveur mssql, vous ne pouvez avoir qu'un seul index cluster par table, et c'est presque toujours la clé primaire. Un index clusterisé est "attaché" à la table afin qu'il n'ait pas besoin de revenir à la table pour obtenir d'autres éléments de données qui pourraient se trouver dans la clause "select". Un index non clusterisé n'est pas attaché, mais contient une référence à la ligne du tableau avec tout le reste des données.

Questions connexes