Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Przekroczono limit czasu zapytania SQL Server w zależności od klauzuli Where

Problem, którego doświadczasz, jest (prawie na pewno) spowodowany buforowanym planem zapytań, który jest odpowiedni dla niektórych wersji parametrów przekazywanych do zapytania, ale nie dla innych (aka Wykrywanie parametrów).

Jest to częste zjawisko, które często pogarszają nieaktualne statystyki i/lub mocno pofragmentowane indeksy.

Pierwszy krok :upewnij się, że odbudowałeś wszystkie swoje indeksy i że statystyki dotyczące nieindeksowanych kolumn są aktualne. (Upewnij się również, że Twój klient ma regularnie zaplanowane zadanie konserwacji indeksu)

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

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

To jest kanoniczne odniesienie:Wolno w aplikacji, szybko w SSMS?

Jeśli problem nadal występuje po odbudowaniu indeksów i aktualizacji statystyk, masz kilka możliwości:

  1. Użyj dynamicznego SQL (ale najpierw przeczytaj:Klątwa i błogosławieństwa dynamicznego SQL)

  2. Użyj OPTIMIZE FOR

  3. Użyj WITH(RECOMPILE)




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Co to jest jednostka DTU w Azure SQL Database i jak określić, ile potrzebujemy

  2. Jak zatrzymać/uruchomić kolejkę poczty bazy danych w programie SQL Server (T-SQL)

  3. Jaka jest maksymalna liczba znaków dla NVARCHAR(MAX)?

  4. Dynamicznie twórz kolumny sql

  5. Sprawdź, czy plik istnieje, czy nie na serwerze sql?