sql >> Databasteknik >  >> RDS >> Sqlserver

SQL Server Query timeout beroende på Where Clause

Problemet du upplever beror (nästan säkert) på en cachad frågeplan, som är lämplig för vissa versioner av parametrar som skickas till frågan, men inte för andra (alias Parameter Sniffing).

Detta är en vanlig företeelse och förvärras ofta av inaktuell statistik och/eller dåligt fragmenterade index.

Första steget :se till att du har byggt om alla dina index och att statistiken för icke-indexerade kolumner är uppdaterad. (Se även till att din klient har ett regelbundet schemalagt indexunderhållsjobb)

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

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

Detta är den kanoniska referensen:Långsam i applikationen, snabb i SSMS?

Om problemet kvarstår efter att du har byggt om index och uppdaterat statistik, har du några alternativ:

  1. Använd dynamisk SQL (men läs detta först:The Curse and Blessings ofDynamic SQL)

  2. Använd OPTIMIZE FOR

  3. Använd WITH(RECOMPILE)




  1. Hur man uppdaterar från SELECT i SQL Server

  2. Infoga CLOB i Oracle-databasen

  3. Vanliga Postgres-uppgifter på CentOS 7

  4. Hur man kör lagrad procedur från Laravel