Temos algumas tabelas de produção com inúmeras restrições que não são confiáveis no momento. Estamos verificando/confiando para que possam ser usados novamente. Sabemos que o otimizador não os tem usado em seus planos (porque não eram confiáveis). Tenho duas perguntas antes de defini-las novamente como confiáveis.
O otimizador reconhecerá a alteração e as considerará antes de usar planos de consulta em cache para transações reexecutadas? Dito de outra forma, preciso considerar a remoção de quaisquer planos de consulta?
É seguro dizer que esta é uma situação em que o SQL Server está reconstruindo o índice (estamos ativados) e mantendo o índice durante inserções, atualizações e exclusões, mas simplesmente não usando a chave estrangeira?
Obrigado
Sim, o otimizador deve recompilar os planos, pois as alterações em uma tabela subjacente são um dos acionadores que resultam na recompilação de um plano. Como a verificação de uma restrição envolve um
ALTER TABLE
comando,isso deve qualificá-lo como um motivo válido para atualizar os planos, de acordo com este artigo do TechNet (de 2008 R2, mas também deve ser válido para as versões atuais), que especifica que um comando
ALTER TABLE
ouALTER VIEW
será qualificado.Correto. Como você observou, o otimizador ignora a chave estrangeira ao criar planos de consulta - nenhuma operação envolvendo a tabela fará uso da chave estrangeira enquanto ela não for confiável, seja uma reconstrução ou uma inserção, atualização, etc.