2012-05-10 12 views
6

Q1: ¿Vale la pena crear índices para columnas de clave externa en una base de datos de SQL Server?Índices de SQL Server: ¿qué columnas incluir en el índice?

Q2: Si tengo dos tablas relacionadas en una base de datos SQL Server y quiero crear un índice en la columna clave externa para mejorar el rendimiento, ¿qué columnas debo incluir en el índice y qué tipo de índice? es el más adecuado?

Por ejemplo ...

Table1

Table1ID int (clave principal)

Table2

Table2ID int (clave primaria)
Table1ID int (clave externa)

.. ¿Crearía un índice para Table2 solo con Table1ID o necesito incluir también la clave primaria (Table2ID).

Q3: Si extiendo el ejemplo para incluir una tercera tabla que está relacionada con Table1 y Table2, ¿creo un índice para cada columna o un índice con ambas columnas?

Table3

int Table3ID (clave primaria)
Table1ID int (clave externa)
Table2ID int (clave externa)

Respuesta

6

Q1. . (Siempre puedes eliminarlos más tarde si descubres que no están siendo utilizados regularmente).

Q2. ¿Crearía un índice para Table2 solo con Table1ID? . Suponiendo que el uso principal previsto del índice es ayudar al optimizador con combinaciones entre estas 2 tablas. (En lugar de satisfacer alguna otra consulta que sea parte de su carga de trabajo de consulta general).

Q3. . Cada columna con una clave externa debe tener un índice separado para su tabla de clave principal.

(Todo suponiendo que tiene una base de datos OLTP en lugar de una base de datos OLAP)

Este puesto proporciona TSQL que va a generar una secuencia de comandos de todos los índices de claves externas que faltan en una base de datos: TSQL: Generate Missing Foreign Key Indexes

+0

Gracias por la respuesta @Mitch Wheat, ¿qué tipo de índice debo crear (en clúster o sin clúster)? ¿Es suficiente CREAR CLUSTERED INDEX IX_Table2_Table1ID ON Table2 (Table1ID) o debería agregar alguna opción? – johna

+2

generalmente, todos los índices de FK no estarán agrupados. –

0

Ninguna de las los índices que está pensando crear son una mala idea. Pero, si busca medidas de rendimiento, debe observar cómo se abordan con más frecuencia las tablas. Qué columnas estarán en su cláusula WHERE más; y base tus índices en esos.

También busque la mejor cardinalidad y colóquela en la parte superior de sus cláusulas WHERE. Considera la partición también.

Cuestiones relacionadas