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

Wykonywanie przechowywanego proc z DotNet trwa bardzo długo, ale w SSMS jest natychmiastowe

Ponieważ mój komentarz wydawał się dostarczać poprawnej odpowiedzi, postanowiłem przenieść go do pełnej odpowiedzi dla potomnych w duchu stackoverflow.

Wygląda na to, że Twój problem jest spowodowany Parameter Sniffing przez SQL Server .Aby temu zapobiec, po prostu przypisz przychodzące wartości parametrów do innych zmiennych zadeklarowanych w górnej części Twojego SP.

Zobacz ten fajny artykuł na ten temat

Przykład:

CREATE PROCEDURE dbo.MyProcedure
(
    @Param1 INT
)
AS

declare @MyParam1 INT
set @MyParam1 = @Param1

SELECT * FROM dbo.MyTable WHERE ColumnName = @MyParam1 

GO

Skopiowałem te informacje z kawiarnia jajeczna.com .

Edycja:zgodnie z komentarzem Johanna Strydoma, oto kolejna opcja:Optymalizuj zapytania oparte na parametrach za pomocą SQL Server OPTYMALIZUJ PODPOWIEDŹ .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Czy pojedyncza instrukcja SQL Server jest niepodzielna i spójna?

  2. Jak zwrócić liczby losowe jako kolumnę w SQL Server 2005?

  3. MSSQL cast([varcharColumn] to int) w SELECT jest wykonywany przed klauzulą ​​WHERE odfiltrowującą złe wartości

  4. Zapytanie w wielu bazach danych na tym samym serwerze

  5. SSMS 2008 konwertuje znaki kontrolne na spacje podczas korzystania z funkcji „Wyniki na siatkę”