Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Por que uma consulta parametrizada produz um plano de consulta muito mais lento versus uma consulta não parametrizada


Parece que o planejador de consulta tomou uma decisão na consulta literal que se baseia nas informações que já possui. Ele teria estatísticas que podem ser consultadas com eficiência com base na disseminação de dados fornecidos em seu literal específico.

A consulta parametrizada escolheu a consulta que acredita ser a mais justa para todos os dados em sua tabela, que você notará são muitos loops aninhados (desempenho =ruim).

Talvez você possa tentar executar as ferramentas de otimização de banco de dados em seu banco de dados para ver se alguns índices podem ajudá-lo aqui?

Especificamente em sua consulta, tente isto:
declare @p0 int
set @p0 = 1000
select *
from foo
join bar on bar.x = foo.x
join baz on baz.y = foo.y
where foo.x = @p0
OPTION ( OPTIMIZE FOR (@p0 = 1000))

Mas eu ficaria cauteloso em fazer isso sem ter certeza de que os dados contidos nesta consulta não serão alterados e que sua consulta neste plano SEMPRE será mais eficiente.