Supongamos que tengo 2 tablas, productos y categorías de productos. Ambas tablas tienen una relación en CategoryId. Y esta es la consulta.¿La clave externa mejora el rendimiento de las consultas?
SELECT p.ProductId, p.Name, c.CategoryId, c.Name AS Category
FROM Products p
INNER JOIN ProductCategories c ON p.CategoryId = c.CategoryId
WHERE c.CategoryId = 1;
Cuando creo el plan de ejecución, la tabla ProductCategories realiza la búsqueda del índice del clúster, lo que es una expectativa. Pero para Table Products, realiza un análisis de índice de clúster, lo que me hace dudar. ¿Por qué FK no ayuda a mejorar el rendimiento de las consultas?
Así que tengo que crear un índice en Products.CategoryId. Cuando vuelvo a crear el plan de ejecución, ambas tablas realizan búsqueda de índice. Y el costo del subárbol estimado se reduce mucho.
Mis preguntas son:
lado FK ayuda en la relación de restricción, ¿tiene cualquier otra utilidad? ¿Mejora el rendimiento de las consultas?
¿Debo crear un índice en todas las columnas FK (me gustó Products.CategoryId) en todas las tablas?
+1: El modelo es una cosa. El rendimiento es otro. –
Los buenos modelos (generalmente) funcionan mejor. –
"Las claves externas son una herramienta de integridad relacional": utilice la palabra "relacional" con cuidado. Las claves foráneas son un concepto de base de datos, una mano corta para una restricción de integridad referencial. No son parte del modelo relacional. Supongo que cometiste un error tipográfico. – onedaywhen