¿Cómo indexar un resultado JOIN de dos o más tablas para mejorar el rendimiento en el servidor SQL?


9

Soy nuevo en la indexación y revisé los conceptos básicos de la indexación. Puedo encontrar un índice agrupado predeterminado para la restricción de clave primaria dentro de la parte de índices de la tabla correspondiente, pero después de crear una restricción de clave externa no puedo encontrar ninguna.

Ahora tengo un requisito en el que se debe implementar la indexación para mejorar el rendimiento. He leído sobre indexar la clave externa para mejorar el rendimiento de un resultado JOIN .

¿Debo agregar la columna de clave externa a un índice no agrupado adicional o la clave externa tiene una indexación predeterminada?

¿Cómo puedo implementar efectivamente la indexación si la estructura de mi tabla SQL es la siguiente y tengo una consulta JOIN con la 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)

Respuestas:


13

Una clave externa no tiene un índice por defecto. Tienes que crear uno.

En este caso, sugeriría cualquiera de estos. Depende de la selectividad relativa de las 2 columnas.

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 hará que el índice cubra para evitar búsquedas de clave / marcador


1
Incluir era una nueva característica en SQL-Server 2005. En caso de que todavía esté en SQL Server 2000.
bernd_k

@bernd_k: Hace solo 6 años y 3 versiones :-)
gbn
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.