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

Защо изпълнението на съхранени процедури е по-бързо от SQL заявката от скрипт?

SQL Server основно преминава през тези стъпки, за да изпълни всяко заявка (извикване на съхранена процедура или ad-hoc SQL израз):

1) синтактично проверете заявката
2) ако е наред - проверява кеша на плана, за да види дали вече има план за изпълнение за тази заявка
3) дали има план за изпълнение - този план е ( повторно) се използва и заявката се изпълнява
4) ако все още няма план, се определя план за изпълнение
5) този план се съхранява в кеша на плана за по-късно повторно използване
6) заявката се изпълнява

Въпросът е:ad-hoc SQL и съхранените процедури обикновено не са различни .

Ако ad-hoc SQL заявка използва правилно параметри - както би трябвало, за да предотврати атаки с инжектиране на SQL - характеристиките на нейната производителност не се различават и определено не по-лоши отколкото изпълнението на съхранена процедура.

Съхранената процедура има и други предимства (не е необходимо да се предоставя на потребителите директен достъп до таблица, например), но по отношение на производителността използването на правилно параметризирани ad-hoc SQL заявки е също толкова ефективно като използване на съхранени процедури.

Актуализация: използване на съхранени процедури над непараметризирани заявките са по-добри поради две основни причини:

  • тъй като всяка непараметризирана заявка е нова, различна заявка към SQL Server, тя трябва да премине през всички стъпки за определяне на плана за изпълнение за всяка заявка (по този начин се губи време - и също се губи пространство от кеша на плана, тъй като съхраняването на плана за изпълнение в кеша на плана не помага в крайна сметка , тъй като тази конкретна заявка вероятно не да бъде изпълнен отново)

  • непараметризираните заявки са изложени на риск от атака с инжектиране на SQL и трябва да се избягват на всяка цена



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Еквивалент на MySQL ПРИ АКТУАЛИЗИРАНЕ НА ДУБЛИКАТ КЛЮЧ в Sql Server

  2. Какви са разликите между клъстериран и неклъстериран индекс?

  3. Възстановяване на паралелно архивиране на SQL Server -1

  4. Как мога да избера от списък със стойности в SQL Server

  5. 3 начина за изтриване на дублиращи се редове в SQL Server, като игнорирате първичния ключ