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

Заявката е изключително бавна в кода, но бърза в SSMS

Вашият код в SSMS не е същият код, който изпълнявате във вашето приложение. Този ред във вашето приложение добавя параметър NVARCHAR:

 ada.SelectCommand.Parameters.AddWithValue("@clientID", ClientID);

докато в SSMS скрипта го декларирате като VARCHAR:

declare @clientID varchar(200)

Поради правилата за приоритет на типа данни Where client_id = @clientID изразът във вашата заявка не е с възможност за SARG, където @clientID е от тип NVARCHAR (правя скок на вяра и предполагам, че client_id колоната е от тип VARCHAR). По този начин приложението принуждава сканиране на таблица, където SSMS заявката може да извърши бързо търсене на ключ. Това е добре познат и разбиран проблем с използването на Parameters.AddWithValue и е обсъждан в много статии преди, напр. вижте Как кодът за достъп до данни влияе върху производителността на базата данни. След като проблемът е разбран, решенията са тривиални:

  • добавете параметри с конструктора, който приема тип:Parameters.Add("@clientID", SqlDbType.Varchar, 200)направи предайте изричната дължина, за да предотвратите замърсяването на кеша, вижте проблеми с производителността на заявките и планирайте кеша, когато дължината на параметъра не е посочена правилно

  • или прехвърляне на параметъра в SQL текста:where client_id = cast(@clientID as varchar(200)) .

Първото решение е по-добро, защото решава проблема със замърсяването на кеша в допълнение към проблема със способността за SARG.

Също така бих ви препоръчал да прочетете Бавно в приложението, Бързо в SSMS? Разбиране на мистериите на производителността



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Автоматизирано извличане на номера на версията от .Dtsx файлове

  2. Каква е целта на репликацията на данни?

  3. DISTINCT само за една колона

  4. Как мога да се свържа със Sql сървър от Mac с PHP PDO?

  5. Изпълнение на SSIS пакет с помощта на dtexec