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

Tempo limite da consulta do SQL Server dependendo da cláusula Where


O problema que você está enfrentando é (quase certamente) devido a um plano de consulta em cache, que é apropriado para algumas versões de parâmetros passados ​​para a consulta, mas não para outras (também conhecidas como Parameter Sniffing).

Esta é uma ocorrência comum, e muitas vezes é agravada por estatísticas desatualizadas e/ou índices muito fragmentados.

Primeiro passo :verifique se você reconstruiu todos os seus índices e se as estatísticas em colunas não indexadas estão atualizadas. (Além disso, certifique-se de que seu cliente tenha um trabalho de manutenção de índice agendado regularmente)
exec sp_msforeachtable "DBCC DBREINDEX('?')"
go

exec sp_msforeachtable "UPDATE STATISTICS ? WITH FULLSCAN, COLUMNS"
go

Esta é a referência canônica:Slow in the Application, Fast in SSMS?

Se o problema persistir após a reconstrução dos índices e a atualização das estatísticas, você terá algumas opções:

  1. Use SQL dinâmico (mas leia isto primeiro:The Curse and Blessings ofDynamic SQL)

  2. Use OPTIMIZE FOR

  3. Use WITH(RECOMPILE)