Estou tentando aprender mais sobre o operador de plano de consulta "verificação de referências de chave estrangeira" introduzido no SQL Server 2016. Não há muitas informações sobre isso por aí. A Microsoft anunciou aqui e eu escrevi sobre isso aqui . O novo operador pode ser visto excluindo uma linha de uma tabela pai com 254 ou mais referências de chave estrangeira recebidas: dbfiddle link .
Existem três contagens diferentes exibidas nos detalhes do operador:
- Referências de chaves estrangeiras Contagem é o número de chaves estrangeiras recebidas.
- Nenhuma contagem de índices correspondente é o número de chaves estrangeiras recebidas sem um índice adequado. A verificação de que a tabela atualizada ou excluída não violará essa restrição exigirá uma verificação de uma tabela filha.
- Não sei o que a Contagem Parcial de Índices Correspondentes representa.
O que é um índice de correspondência parcial nesse contexto? Não consegui fazer funcionar nenhum dos seguintes itens:
- Índices filtrados
- Colocando a coluna de chave estrangeira como uma
INCLUDE
coluna para um índice - Indexa com a coluna de chave estrangeira como a segunda coluna de chave
- Índices de coluna única para chaves estrangeiras de várias colunas
- Criando vários índices de cobertura para permitir um plano de "junção de índice" para uma chave estrangeira de várias colunas
Dan Guzman apontou que as chaves estrangeiras de várias colunas podem corresponder aos índices, mesmo que as chaves de índice estejam em uma ordem diferente das colunas de chaves estrangeiras. Seu código está aqui , caso alguém possa usá-lo como ponto de partida para descobrir mais sobre índices de correspondência parcial.
fonte
Depois de pesquisar um pouco mais no Google, consegui publicar uma postagem que menciona "Índices de correspondência parcial" e Chaves estrangeiras
A postagem do blog de 1º de março de 2013 no Code Blog de Carlos Klapp intitulada
Foreign Keys without Indexes
tem o procedimento armazenado chamado,Util_FKsWithoutIndexes
que procura chaves estrangeiras que não possuem índices adequados para os relacionamentos do FK. (Parece que este blogueiro tirou isso do SQL Server CentralThe Ultimate Index-Less Foreign-Key Finder
(15 de outubro de 2009) ) O blog diz o seguinte:Se eu entendi isso corretamente, se um relacionamento FK não tiver um índice que corresponda a todas as colunas em algum índice necessário, pode haver alguns índices que contenham algumas das colunas. Por exemplo, se uma relação FK tem três colunas (
a
,b
,c
), mas não existe um índice com as mesmas três colunas, pode existir um índice que tem (a
,b
) ou (a
,c
) ou (b
,c
) e podem ajudar com consultas mas será requer algumas verificações de índice em linhas com a coluna ausente.Se não houver índices que possam suportar uma restrição de FK, a "Contagem de índices de correspondência parcial" será zero (
0
) ou pelo menos não aumentará essa contagem.fonte
(FKey2,FKey3)
e crie um índiceFKey2
. Por favor, tente isso.create unique index FULL_IX_UNIQUE ON FK_PARENT_TABLE (FKey, Fkey2, Fkey3)
, manter o índiceFKey2
e tentar novamente.