J'essaie d'en savoir plus sur l'opérateur de plan de requête «vérification des références de clés étrangères» introduit dans SQL Server 2016. Il n'y a pas beaucoup d'informations à ce sujet. Microsoft l'a annoncé ici et j'ai blogué à ce sujet ici . Le nouvel opérateur peut être vu en supprimant une ligne d'une table parent avec 254 références de clés étrangères entrantes ou plus: lien dbfiddle .
Il y a trois nombres différents affichés dans les détails de l'opérateur:
- Le nombre de références de clés étrangères est le nombre de clés étrangères entrantes.
- Aucun index correspondant ne correspond au nombre de clés étrangères entrantes sans index approprié. Pour vérifier que la table mise à jour ou supprimée ne violera pas cette contrainte, il faudra analyser une table enfant.
- Je ne sais pas ce que représente le nombre d' index de correspondance partielle .
Qu'est-ce qu'un index d'appariement partiel dans ce contexte? Je n'ai pas réussi à faire fonctionner les éléments suivants:
- Index filtrés
- Mettre la colonne de clé étrangère en tant que
INCLUDE
colonne pour un index - Index avec la colonne de clé étrangère comme deuxième colonne de clé
- Index à colonne unique pour clés étrangères à plusieurs colonnes
- Création de plusieurs index de couverture pour activer un plan de "jointure d'index" pour une clé étrangère à plusieurs colonnes
Dan Guzman a souligné que les clés étrangères à plusieurs colonnes peuvent correspondre aux index même si les clés d'index sont dans un ordre différent de celui des colonnes de clés étrangères. Son code est là au cas où quelqu'un pourrait l'utiliser comme point de départ pour en savoir plus sur les index de correspondance partielle.
la source
Après un peu plus de recherche sur Google, j'ai réussi à trouver un article qui mentionne les "indices de correspondance partielle" et les clés étrangères
Le billet de blog du 1er mars 2013 dans le blog de code de Carlos Klapp intitulé
Foreign Keys without Indexes
a la procédure stockée appeléeUtil_FKsWithoutIndexes
qui recherche les clés étrangères qui n'ont pas d'index appropriés pour les relations FK. (On dirait que ce blogueur a retiré cela de SQL Server CentralThe Ultimate Index-Less Foreign-Key Finder
(15 octobre 2009) ) Le blog dit ce qui suit:Si je comprends bien, si une relation FK n'a pas d'index qui correspond à chaque colonne dans certains index nécessaires, il peut y avoir certains index qui ont certaines des colonnes. Par exemple, si une relation FK a trois colonnes (
a
,b
,c
) mais il n'y a pas d' index avec ces mêmes trois colonnes, il peut exister un indice qui a (a
,b
) ou (a
,c
) ou (b
,c
) et peut aider avec des requêtes , mais ils nécessitent des analyses d'index sur les lignes avec la colonne manquante.S'il n'y a aucun index pouvant prendre en charge une contrainte FK, le "nombre d'index de correspondance partielle" sera égal à zéro (
0
), ou du moins n'incrémentera pas ce nombre.la source
(FKey2,FKey3)
et créez un index surFKey2
. Veuillez essayer.create unique index FULL_IX_UNIQUE ON FK_PARENT_TABLE (FKey, Fkey2, Fkey3)
, conserver l'indexFKey2
et réessayer.