Wie indiziere ich ein JOIN-Ergebnis aus zwei oder mehr Tabellen, um die Leistung in SQL Server zu verbessern?

9

Ich bin neu in der Indizierung und habe die Grundlagen der Indizierung durchgearbeitet. Ich kann einen Standard-Clustered-Index für die Primärschlüsseleinschränkung im Indexteil der entsprechenden Tabelle finden, aber nach dem Erstellen einer Fremdschlüsseleinschränkung kann ich keinen finden.

Jetzt habe ich eine Anforderung, in der die Indizierung implementiert werden sollte, um die Leistung zu verbessern. Ich habe über die Indizierung des Fremdschlüssels gelesen , um die Leistung eines JOIN-Ergebnisses zu verbessern .

Muss ich die Fremdschlüsselspalte einem zusätzlichen nicht gruppierten Index hinzufügen oder hat der Fremdschlüssel eine Standardindizierung?

Wie kann ich die Indizierung effektiv implementieren, wenn meine SQL-Tabellenstruktur wie folgt ist und ich eine JOIN-Abfrage mit WHERE-Klausel unter Verwendung von t1_col3 habe?

               table1                       table2
               ------                       ------
               t1_col1(pk)                  t2_col1(pk)
               t1_col2                      t2_col2
               t1_col3                      t2_col3
               t1_col4                      t2_col4
               t2_col1(FK)
Harun
quelle

Antworten:

13

Ein Fremdschlüssel hat standardmäßig keinen Index. Sie müssen eine erstellen.

In diesem Fall würde ich beides vorschlagen. Dies hängt von der relativen Selektivität der beiden Spalten ab

CREATE INDEX IX_table2fk ON
              table1 (t2_col1, t1_col3)
              INCLUDE (any columns needed for the query)

ODER

CREATE INDEX IX_table2fk ON
              table1 (t1_col3, t2_col1)
              INCLUDE (any columns needed for the query)

Mit INCLUDE wird der Index abgedeckt , um das Nachschlagen von Schlüsseln / Lesezeichen zu vermeiden

gbn
quelle
1
Include war eine neue Funktion in SQL-Server 2005. Nur für den Fall, dass Sie sich noch auf SQL Server 2000 befinden.
bernd_k
@bernd_k: Nur 6 Jahre und 3 Versionen vor :-)
gbn