Disons que je le tableau suivant dans SQL Server 2008:Quand utiliser un indice de couverture, un indice composite et indices colonnaires uniques
ProfileID int //identity; index: unique, primary key, clustered
ClientID int
RegionID int
ProfileName nvarchar(50)
Colonnes 2 et 3 lien vers leurs tables respectives via des relations étrangères.
Disons que ma requête la plus commune est la suivante:
SELECT ProfileID, ProfileName
FROM Profiles
WHERE ClientID = ? AND RegionID = ?
ORDER BY ProfileName
Quel système d'indexation est le mieux adapté? Si je mets un index de recouvrement sur (ProfileID, ProfileName), alors cela tue l'index cluster par défaut car les index de couverture doivent être non-cluster, mais satisfont au moins la partie retour de la requête. Si je laisse la clé primaire telle quelle, et indexe indépendamment ClientID et RegionID, cela me donne 3 index qui doivent être maintenus par le SGBDR, PLUS un scan de table serait toujours nécessaire pour retourner ProfileName car il n'est pas t couvert. Cela semble lourd.
Une étude de cas simple sur la façon dont la planification d'indexation complexe peut être.
@Quassnoi mon ami, vous êtes de retour. Je suppose que vous voulez dire "... et quitter l'index primaire aussi"? Pas seulement cet index? – IamIC
@IanC: oui, bien sûr. – Quassnoi
Quassnoi J'ai deux questions: 1) J'aurais pensé (ClientID, RégionID ...) serait mieux car ClientID est la colonne la plus unique (ok, je n'ai pas mentionné cela dans ma question, accordée). Je suppose que l'ordre est le plus unique au moins unique. La deuxième Q est pourquoi ProfileName dans l'index, mais pas comme une colonne incluse, lorsque nous ne l'interroge pas spécifiquement? – IamIC