Estoy tratando de obtener más información sobre el operador del plan de consulta "comprobación de referencias de clave externa" introducido en SQL Server 2016. No hay mucha información al respecto. Microsoft lo anunció aquí y escribí un blog al respecto aquí . El nuevo operador se puede ver eliminando una fila de una tabla primaria con 254 o más referencias de claves externas entrantes: enlace dbfiddle .
Hay tres recuentos diferentes que se muestran en los detalles del operador:
- El recuento de referencias de clave externa es el número de claves externas entrantes.
- El número de índices coincidentes es el número de claves externas entrantes sin un índice adecuado. La verificación de que la tabla actualizada o eliminada no viola esa restricción requerirá un análisis de una tabla secundaria.
- No sé qué representa el recuento de índices de coincidencia parcial .
¿Qué es un índice de coincidencia parcial en este contexto? No pude hacer funcionar ninguno de los siguientes:
- Índices filtrados
- Poner la columna de clave externa como una
INCLUDE
columna para un índice - Índices con la columna de clave externa como la segunda columna de clave
- Índices de una sola columna para claves externas de múltiples columnas
- Crear múltiples índices de cobertura para habilitar un plan de "unión de índice" para una clave externa de múltiples columnas
Dan Guzman señaló que las claves externas de varias columnas pueden coincidir con los índices, incluso si las claves del índice están en un orden diferente al de las columnas de claves externas. Su código está aquí en caso de que alguien pueda usarlo como punto de partida para descubrir más sobre índices de coincidencia parcial.
fuente
Después de buscar más en Google, logré crear una publicación que menciona "Índices de coincidencia parcial" y claves extranjeras
La publicación de blog del 1 de marzo de 2013 en el blog de Carlos Klapp Code
Foreign Keys without Indexes
tiene el Procedimiento almacenado llamadoUtil_FKsWithoutIndexes
que busca claves externas que no tienen índices adecuados para las relaciones FK. (Parece que este blogger sacó esto de SQL Server Central'sThe Ultimate Index-Less Foreign-Key Finder
(15 de octubre de 2009) ) El blog dice lo siguiente:Si entiendo esto correctamente, si una relación FK no tiene un índice que coincida con cada columna en algún índice necesario, puede haber algunos índices que tengan algunas de las columnas. Por ejemplo, si una relación FK tiene tres columnas (
a
,b
,c
), pero no existe un índice con esos mismos tres columnas, puede existir un índice que tiene (a
,b
) o (a
,c
) o (b
,c
) y puede ayudar con las consultas pero Will requieren algunos escaneos de índice a filas con la columna que falta.Si no hay ningún índice que pueda soportar una restricción FK, entonces el "Recuento de índices de coincidencia parcial" será cero (
0
), o al menos no incrementará este recuento.fuente
(FKey2,FKey3)
y crea un índiceFKey2
. Por favor intente eso.create unique index FULL_IX_UNIQUE ON FK_PARENT_TABLE (FKey, Fkey2, Fkey3)
, mantener el índiceFKey2
y volver a intentarlo.