2009-05-06 7 views
1

Ich habe einen Bericht, der eine lange Zeit zur Ausführung benötigte. Ich habe den Datenbank-Engine-Tuning-Advisor ausgeführt, und eine der Empfehlungen bestand darin, zwei Indizes zu erstellen. Ich bemerkte jedoch, dass die Indizes die gleichen Spalten waren, aber in verschiedenen Ordnungen. HierSQL Server 2005 Indexierung derselben Spalten in anderer Reihenfolge

ist die Tabelle:

---Locations--- 
| *LocationID | 
| Code  | 
| ...more... | 
| DivisionID | 
| RegionID | 
--------------- 

und die Empfehlung war diese 2-Indizes

CREATE NONCLUSTERED INDEX [IX_Locations_Region_Loc_Div] ON [dbo].[Locations] 
(
    [RegionID] ASC, 
    [LocationID] ASC, 
    [DivisionID] ASC 
) 
INCLUDE ([Code]) WITH (SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF) ON [PRIMARY] 
GO 

CREATE NONCLUSTERED INDEX [IX_Locations_Loc_Reg_Div] ON [dbo].[Locations] 
(
    [LocationID] ASC, 
    [RegionID] ASC, 
    [DivisionID] ASC 
) 
INCLUDE ([Code]) WITH (SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF) ON [PRIMARY] 
GO 

Warum die SQL Server benötigen würde hinzufügen, diese 3 Spalten Indizes in unterschiedlicher Reihenfolge haben, wenn sie nur für eine innere Verbindung verwendet?

SELECT UserID, LocationID FROM [User] u INNER JOIN [Locations] l ON u.LocationID = l.LocationID 

Antwort

2

Es wäre nicht für die SQL, die Sie enthalten haben. Es muss andere Fragen geben, die es in Betracht zieht, diese Empfehlung zu machen.

0

Gab es eine where-Klausel in der Anweisung, als Sie die Tuning-Engine ausgeführt haben? Ich würde auch eine Order-by-Klausel auf die Anweisung setzen und sehen, ob dies der Datenbank/Tuning-Engine hilft, den Index am besten auszurichten.

0

Eine Möglichkeit, Ihre Frage zu beantworten, ist der Ausführungsplan in Sql Server Management Studio der Abfrage vor dem Hinzufügen der Indizes und dann nach den Indizes. Immer interessante, wenn nicht nützliche Informationen dort.

0

Ich bin mir nicht sicher über 2005, aber ich weiß, dass (zumindest einige) frühere Versionen von SQL Server nur einen Index zu verwenden, wenn die Spalten in der WHERE-Klausel in der gleichen Reihenfolge wie die Spalten in waren Der Index. Mag es nicht, aber hat es bewiesen.

Ich habe gerade bemerkt, dass du über Joins sprichst - damals schrieb ich meine Joins hauptsächlich in die where-Klausel und nicht in die ANSI-Syntax, also denke ich, dass sie immer noch zutrifft.