Sintomas
Assuma que tem uma tabela utilizando um constrangimento de chave estrangeira definido para eliminar cascata, e as estatísticas sobre a coluna-chave estrangeira não cobrem toda a gama dos valores-chave da tabela (por exemplo: porque as estatísticas não foram atualizadas após alterações na distribuição de dados na tabela). Neste cenário, quando se tenta apagar uma linha correspondente a um valor-chave não representado no histograma estatístico, e o Otimizador de Consulta está a usar a estimativa de cardinalidade padrão, a operação de eliminação é mais lenta do que o esperado. Também pode notar que uma operação de verificação de índices é usada para encontrar as linhas correspondentes na tabela de referência.
Estado
A Microsoft confirmou que este problema ocorre nos produtos da Microsoft listados na secção "Aplica-se a".
Resolução
Esta emissão é corrigida nas seguintes atualizações cumulativas para o SQL Server:
Nota: Esta correção só é ativada quando gira hotfixes optimizadores ON (seja através da opção de configuração do âmbito de tempo de base de dados, sugestão de consulta ou de traço de bandeira 4199).
Sobre as atualizações cumulativas para o SQL Server:
Cada nova atualização cumulativa do 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. Confira as últimas atualizações cumulativas do SQL Server:
Solução
Para contornar este problema, utilize um dos métodos seguintes:
-
Use a estimativa do cardinalício legado. Para obter mais informações, consulte a Estimativa cardinalício (SQL Server).
-
Retire a cascata para eliminar a definição de Chave Estrangeira e execute a operação de eliminação utilizando as tabelas DE SEPAR entre os pais e as mesas de crianças para realizar o equivalente à eliminação em cascata.
-
Atualize as estatísticas na tabela dos pais com o FULLSCAN antes de eliminar os dados.
Referências
Conheça a terminologia que a Microsoft utiliza para descrever atualizações de software.