Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Времето за изчакване на заявката на SQL Server зависи от клаузата Where

Проблемът, който изпитвате, се дължи (почти сигурно) на кеширан план за заявка, който е подходящ за някои версии на параметрите, предадени на заявката, но не и за други (известен още като Parameter Sniffing).

Това е често срещано явление и често се влошава от остарели статистически данни и/или лошо фрагментирани индекси.

Първа стъпка :уверете се, че сте възстановили всичките си индекси и че статистическите данни за неиндексирани колони са актуални. (Освен това се уверете, че вашият клиент има редовно планирана работа за поддръжка на индекс)

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

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

Това е каноничната справка:Бавно в приложението, Бързо в SSMS?

Ако проблемът все още съществува след възстановяване на индекси и актуализиране на статистиката, тогава имате няколко опции:

  1. Използвайте динамичен SQL (но първо прочетете това:Проклятието и благословиите на динамичния SQL)

  2. Използвайте OPTIMIZE FOR

  3. Използвайте 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. Растерни изображения в пакетен режим в SQL Server

  2. Обединете няколко реда в един ред

  3. SQL Server Passthrough заявка като основа за набор от записи DAO в Access

  4. Анализиране на I/O производителността за SQL Server

  5. Мрежови интерфейси на SQL, грешка:50 - Възникна грешка при изпълнение на локална база данни. Не може да се създаде автоматичен екземпляр