sql >> Databáze >  >> RDS >> Sqlserver

Časový limit dotazu SQL Server v závislosti na klauzuli Where

Problém, se kterým se setkáváte, je (téměř jistě) způsoben plánem dotazů uloženým v mezipaměti, který je vhodný pro některé verze parametrů předávaných dotazu, ale ne pro jiné (také znám jako Parameter Sniffing).

To je běžný jev a často se zhoršuje zastaralými statistikami a/nebo špatně fragmentovanými indexy.

První krok :ujistěte se, že jste znovu vytvořili všechny své indexy a že statistiky neindexovaných sloupců jsou aktuální. (Také se ujistěte, že váš klient má pravidelně naplánovanou úlohu údržby indexu)

exec sp_msforeachtable "DBCC DBREINDEX('?')"
go

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

Toto je kanonický odkaz:Pomalý v aplikaci, rychlý v SSMS?

Pokud problém přetrvává i po opětovném sestavení indexů a aktualizaci statistik, máte několik možností:

  1. Používejte dynamické SQL (ale nejprve si přečtěte toto:The Curse and Blessings of Dynamic SQL)

  2. Použijte OPTIMIZE FOR

  3. Použijte WITH(RECOMPILE)




  1. Jak nasadit MySQL na Ubuntu a plně spravované

  2. SQL Server 2016:Vložení dat

  3. MySQL Alter Stored Procedure

  4. Instalace PostgresSQL se nezdařila:Inicializace databázového clusteru se nezdařila MAC OS