2012-04-15 7 views
-1

Ich werde hier keine Abfrage hinzufügen, da es in der Abfrage nichts Besonderes gibt.
In Abfrage habe ich links auf 10 Tabellen beitreten.
So erstellen Sie einen Index für eine Spalte, um die Ausführung der Abfrage zu erhöhen

...left join tableB b on a.UserId = b.UserId 
left join tableC c on a.UserId = c.UserId 
left join tableD d on a.UserId = d.UserId 

Die Ausführung dieser Abfrage ist 23 Sekunden. Das ist schon zu viel.
Alle Tabellen sind durch UserId Fremdschlüssel vom Typ uniqueidentifier verbunden.
Jetzt dachte ich, dass ich vielleicht Indizes hinzufügen muss, aber ich mache das zum ersten Mal und ich bin mir nicht sicher, ob ich es richtig mache.
In Management-Studio gehe ich zu table design > manage keys indexes > add index > in dropdown I select UserId (ASC)
Ich mache dies in allen 10 Tabellen und nachdem ich die Abfrage Ausführung der Abfrage war 45 Sekunden. Und das ist schlimmer als zuvor.
Mache ich etwas falsch beim Index hinzufügen?

+1

Bitte buchen Sie die Ausführungspläne vor und nach der Änderung. – GSerg

+0

Ich habe Frage zur Frage hinzugefügt. Ich mache nie mit Ausführungsplänen. Was soll ich dir zeigen? Ich betreibe es, aber ich habe sehr großen Text. – 1110

Antwort

0

Das Hinzufügen eines Index für die Benutzer-ID hilft Ihnen nicht, wenn Sie eine andere Spalte als die Benutzer-ID auswählen. Für maximale Leistung können Sie einen nicht gruppierten Index für jede Tabelle erstellen, der nach der Benutzer-ID sortiert ist, und auch alle anderen Spalten, die Sie für Ihre Abfrage benötigen.

Das würde Ihnen die beste Leistung geben, aber es gibt eine Menge Overhead, der alle diese Indizes verwaltet, so dass Sie das berücksichtigen müssen.

0

Es war Gruppe nach Problem. Ich organisiere die Gruppe etwas anders und die Ausführungszeit ist in Millisekunden jetzt :) Hier was ich gemacht habe. I entfernt count() von ausgewählten und ganzen Gruppe von Abschnitt und in von I schreiben:

select S3.TotalCheckIns 
... 
left join (select userid, count(CheckInId) as TotalCheckIns 
    FROM dbo.checkins 
    GROUP BY UserId) S3 on p.UserId = S2.UserId 
    where p.UserId = @m_UserId 

I Technik von diesem Link http://weblogs.sqlteam.com/jeffs/archive/2005/12/14/8546.aspx

0

Die Idee ist, Index für jede FK und PK schaffen verwendet haben (dieses geschaffen automatisch) dabei werden Ihre Joins beschleunigt

Verwandte Themen