2010-08-24 6 views
1

SQL Server 2005 SP3 sur Windows Server 2008 R2.Index SQL Server

J'ai exécuté une trace côté serveur et utiliser DTA (conseiller d'optimisation du moteur de base de données) Sur une table, DTA me suggère de créer un index non cluster avec une clé de clustering. Je veux dire par DTA j'ai besoin de créer un index composite non clusté avec une clé d'index clustrée explicite dans le cadre de l'index non cluster.

Je pensais qu'au niveau feuille, l'index non clivé inclut déjà une clé de clustering.

MeasurementDataID est un indice clé de primay et a regroupés sur elle ...

CREAT INDEX IX_NAME(
[MeasurementID] ASC, 
[SampleName] ASC, 
[MeasurementDataID] ASC) 

Répondre

0

Au niveau des feuilles, il inclut la clé de cluster si l'index vous couvrira la requête.

Mais si votre requête est

WHERE MeasurementID = 1 AND SampleName = 'foo' AND MeasurementDataID=10

Sans l'inclusion de MeasurementDataID il encore besoin de scanner tous les enregistrements de l'index correspondant à la partie WHERE MeasurementID = 1 AND SampleName = 'foo' plutôt que satisfaire la chose avec une recherche si dépendante Comme les deux premiers sont sélectifs, ils pourraient être utiles.

C'est essentiellement la même décision que vous devez prendre lorsque vous envisagez d'ajouter une colonne à un index dans une colonne incluse ou de l'ajouter à la clé.

+0

Je ne suis toujours pas clair .. Est-ce OK de créer explicitement un index non clustré avec une clé de clavetage? Je pensais que SQL Server l'ajouterait derrière la scène .. Si l'architecture d'index est une paire valeur/clé, alors la clé de clustering est ajoutée en tant que valeur clé (sur un index non clusté au niveau feuille) ou en tant que partie de la valeur .... – cshah

+0

Il ne l'ajoutera pas deux fois. Si c'est dans la clé, il le reconnaîtra et ne l'ajoutera pas, alors ajoutez-le explicitement à la clé ou laissez-le l'ajouter implicitement à la feuille. Tout ce qui a le plus de sens pour vos questions. –