Como indexar um resultado JOIN de duas ou mais tabelas para melhorar o desempenho no servidor SQL?

9

Eu sou novo na indexação e passei pelo básico da indexação. Posso encontrar um índice clusterizado padrão para a restrição de chave primária na parte de índices da tabela correspondente, mas depois de criar uma restrição de chave estrangeira não consigo encontrar nenhum.

Agora eu tenho um requisito no qual a indexação deve ser implementada para melhorar o desempenho. Eu li sobre a indexação da chave estrangeira para melhorar o desempenho de um resultado JOIN .

Preciso adicionar a coluna de chave estrangeira a um índice não clusterizado adicional ou a chave estrangeira tem uma indexação padrão?

Como posso implementar efetivamente a indexação se minha estrutura de tabela SQL é a seguinte e eu tenho uma consulta JOIN com a cláusula 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)
Harun
fonte

Respostas:

13

Uma chave estrangeira não possui um índice por padrão. Você tem que criar um.

Nesse caso, eu sugeriria um desses. Depende da seletividade relativa das 2 colunas

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

OU

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

O INCLUDE fará a cobertura do índice para evitar pesquisas de chave / marcador

gbn
fonte
11
Incluir era novo recurso do SQL-Server 2005. Apenas no caso de você ainda está em SQL-Server 2000.
bernd_k
@bernd_k: Apenas 6 anos e 3 versões atrás :-)
gbn