Come indicizzare un risultato JOIN di due o più tabelle per migliorare le prestazioni nel server SQL?


9

Sono nuovo di indicizzare e ho passato le basi dell'indicizzazione. Posso trovare un indice cluster predefinito per il vincolo chiave primaria all'interno della parte degli indici della tabella corrispondente, ma dopo aver creato un vincolo chiave esterna non riesco a trovarne.

Ora ho un requisito in cui l'indicizzazione dovrebbe essere implementata per migliorare le prestazioni. Ho letto sull'indicizzazione della chiave esterna per migliorare le prestazioni di un risultato JOIN .

Devo aggiungere la colonna chiave esterna a un indice aggiuntivo non cluster o la chiave esterna ha un indice predefinito?

Come posso implementare efficacemente l'indicizzazione se la mia struttura di tabella SQL è la seguente e ho una query JOIN con la clausola WHERE usando t1_col3

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

Risposte:


13

Una chiave esterna non ha un indice per impostazione predefinita. Devi crearne uno.

In questo caso, suggerirei uno di questi. Dipende dalla selettività relativa delle 2 colonne

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

O

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

INCLUDE coprirà l' indice per evitare la ricerca di chiavi / segnalibri


1
Includi era una nuova funzionalità in SQL-Server 2005. Nel caso in cui ti trovi ancora su SQL Server 2000.
bernd_k

@bernd_k: solo 6 anni e 3 versioni fa :-)
gbn
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.