¿Una clave externa crea automáticamente un índice?

Resuelto Nick DeVore asked hace 15 años • 12 respuestas

Me han dicho que si introduzco una clave externa en dos tablas, SQL Server creará algo parecido a un índice en la tabla secundaria. Me cuesta creer que esto sea cierto, pero no puedo encontrar mucho relacionado específicamente con esto.

Mi verdadera razón para preguntar esto es porque estamos experimentando un tiempo de respuesta muy lento en una declaración de eliminación en una tabla que probablemente tiene 15 tablas relacionadas. Le pregunté a nuestro encargado de la base de datos y me dijo que si hay una clave externa en los campos, entonces actúa como un índice. ¿Cuál es tu experiencia con esto? ¿Debo agregar índices en todos los campos de clave externa o son simplemente gastos innecesarios?

Nick DeVore avatar May 08 '09 01:05 Nick DeVore
Aceptado

Una clave externa es una restricción, una relación entre dos tablas, que no tiene nada que ver con un índice en sí.

Sin embargo, tiene mucho sentido indexar todas las columnas que forman parte de cualquier relación de clave externa. Una relación FK a menudo necesitará buscar una tabla relacionada y extraer ciertas filas en función de un valor único o un rango de valores.

Por lo tanto, tiene sentido indexar cualquier columna involucrada en un FK, pero un FK per se no es un índice.

Consulte el excelente artículo de Kimberly Tripp "¿Cuándo dejó SQL Server de poner índices en las columnas de clave externa?" .

Actualizado el 31/05/2023
Para aquellos que leen esto ahora, yo (el cartel original) quería actualizar la excelente respuesta de Marc para señalar que Entity Framework Core ahora genera automáticamente índices para claves externas descubiertas por convención. Más útil. No estoy seguro de cuánto tiempo existe esa característica, estoy usando EF Core 7.

marc_s avatar May 07 '2009 18:05 marc_s

Vaya, las respuestas están por todos lados. Entonces la documentación dice:

Una restricción FOREIGN KEY es candidata para un índice porque:

  • Los cambios en las restricciones PRIMARY KEY se verifican con restricciones FOREIGN KEY en tablas relacionadas.

  • Las columnas de clave externa se utilizan a menudo en criterios de combinación cuando los datos de tablas relacionadas se combinan en consultas haciendo coincidir las columnas de la restricción FOREIGN KEY de una tabla con las columnas de clave principal o única de la otra tabla. Un índice permite a Microsoft® SQL Server™ 2000 encontrar rápidamente datos relacionados en la tabla de claves externas. Sin embargo, crear este índice no es un requisito. Los datos de dos tablas relacionadas se pueden combinar incluso si no se definen restricciones de CLAVE PRIMARIA o CLAVE EXTRANJERA entre las tablas, pero una relación de clave externa entre dos tablas indica que las dos tablas se han optimizado para combinarse en una consulta que utiliza las claves como sus criterios.

Entonces parece bastante claro (aunque la documentación es un poco confusa) que en realidad no crea un índice.

Yishai avatar May 07 '2009 18:05 Yishai