SQL Server основно преминава през тези стъпки, за да изпълни всяко заявка (извикване на съхранена процедура или ad-hoc SQL израз):
1) синтактично проверете заявката
2) ако е наред - проверява кеша на плана, за да види дали вече има план за изпълнение за тази заявка
3) дали има план за изпълнение - този план е ( повторно) се използва и заявката се изпълнява
4) ако все още няма план, се определя план за изпълнение
5) този план се съхранява в кеша на плана за по-късно повторно използване
6) заявката се изпълнява
Въпросът е:ad-hoc SQL и съхранените процедури обикновено не са различни .
Ако ad-hoc SQL заявка използва правилно параметри - както би трябвало, за да предотврати атаки с инжектиране на SQL - характеристиките на нейната производителност не се различават и определено не по-лоши отколкото изпълнението на съхранена процедура.
Съхранената процедура има и други предимства (не е необходимо да се предоставя на потребителите директен достъп до таблица, например), но по отношение на производителността използването на правилно параметризирани ad-hoc SQL заявки е също толкова ефективно като използване на съхранени процедури.
Актуализация: използване на съхранени процедури над непараметризирани заявките са по-добри поради две основни причини:
-
тъй като всяка непараметризирана заявка е нова, различна заявка към SQL Server, тя трябва да премине през всички стъпки за определяне на плана за изпълнение за всяка заявка (по този начин се губи време - и също се губи пространство от кеша на плана, тъй като съхраняването на плана за изпълнение в кеша на плана не помага в крайна сметка , тъй като тази конкретна заявка вероятно не да бъде изпълнен отново)
-
непараметризираните заявки са изложени на риск от атака с инжектиране на SQL и трябва да се избягват на всяка цена