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

OPTION (RECOMPILE) е винаги по-бърз; Защо?

Има случаи, когато се използва OPTION(RECOMPILE) има смисъл. Според моя опит единственият път, когато това е жизнеспособна опция, е, когато използвате динамичен SQL. Преди да проучите дали това има смисъл във вашата ситуация, бих препоръчал да възстановите статистиката си. Това може да стане, като изпълните следното:

EXEC sp_updatestats

И след това пресъздаване на вашия план за изпълнение. Това ще гарантира, че когато вашият план за изпълнение е създаден, той ще използва най-новата информация.

Добавяне на OPTION(RECOMPILE) възстановява плана за изпълнение всеки път, когато вашата заявка се изпълнява. Никога не съм чувал това, описано като creates a new lookup strategy но може би просто използваме различни термини за едно и също нещо.

Когато се създаде съхранена процедура (подозирам, че извиквате ad-hoc sql от .NET, но ако използвате параметризирана заявка, тогава това се оказва съхранено proc извикване) SQL Server се опитва да определи най-ефективния план за изпълнение за тази заявка въз основа на данните във вашата база данни и предадените параметри (снифиране на параметри) и след това кешира този план. Това означава, че ако създадете заявката, където има 10 записа във вашата база данни и след това я изпълните, когато има 100 000 000 записа, кешираният план за изпълнение може вече да не е най-ефективен.

В обобщение - не виждам причина OPTION(RECOMPILE) би било от полза тук. Подозирам, че просто трябва да актуализирате статистиката и плана си за изпълнение. Възстановяването на статистически данни може да бъде съществена част от работата на DBA в зависимост от вашата ситуация. Ако все още имате проблеми след актуализиране на статистиката си, предлагам да публикувате и двата плана за изпълнение.

И за да отговоря на въпроса ви – да, бих казал, че е много необичайно най-добрият ви вариант да прекомпилирате плана за изпълнение всеки път, когато изпълнявате заявката.



  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. Как да промените формата на текущата дата в SQL Server (T-SQL)

  3. Разгръщане на сертификат за криптирана връзка SQL Server

  4. Как бързо да напишете Select Query в SQL Server - SQL Server / TSQL урок, част 108

  5. Познайте връзките между всички таблици на базата данни в SQL Server