Sintomas
Suponha que tem uma tabela com uma restrição de chave externa definida para eliminação em cascata e que as estatísticas na coluna de chave externa não abrangem todo o intervalo de valores chave na tabela (por exemplo: porque as estatísticas não foram atualizadas após a distribuição de dados ser alterada na tabela). Neste cenário, quando tenta eliminar uma linha correspondente a um valor de chave não representado no histograma de estatística e o Otimizador de Consultas está a utilizar a estimativa de cardinalidade predefinida, a operação de eliminação é mais lenta do que o esperado. Também poderá reparar que é utilizada uma operação de análise de índice remissivo para localizar as linhas correspondentes na tabela de referência.
Estado
A Microsoft confirmou que se trata de um problema nos produtos Microsoft listados na secção "Aplica-se a".
Resolução
Este problema foi corrigido nas seguintes atualizações cumulativas para SQL Server:
Observação: Esta correção só é ativada quando ativa as correções do otimizador (através da opção de configuração do âmbito da base de dados, sugestão de consulta ou sinalizador de rastreio 4199).
Acerca das atualizações cumulativas para SQL Server:
Cada nova atualização cumulativa para SQL Server contém todos os hotfixes e todas as correções de segurança que foram incluídas com a atualização cumulativa anterior. Consulte as atualizações cumulativas mais recentes para SQL Server:
- Atualização cumulativa mais recente do SQL Server 2019
- Atualização cumulativa mais recente para o SQL Server 2017
Solução
Para contornar esse problema, use um dos seguintes métodos:
- Utilize a estimativa de cardinalidade legada. Para obter mais informações, consulte Estimativa de cardinalidade (SQL Server).
- Remova a eliminação em cascata da definição de Chave Externa e execute a operação de eliminação utilizando JOIN entre as tabelas principal e subordinada para obter o equivalente à eliminação em cascata.
- Atualize as estatísticas na tabela principal com o FULLSCAN antes de eliminar dados.
Referências
Saiba mais sobre a terminologia que a Microsoft utiliza para descrever as atualizações de software.