SQL Server zasadniczo wykonuje te kroki, aby wykonać dowolny zapytanie (wywołanie procedury składowanej lub instrukcja SQL ad-hoc):
1) sprawdź składnię zapytania
2) jeśli wszystko jest w porządku - sprawdza pamięć podręczną planu, aby zobaczyć, czy ma już plan wykonania dla tego zapytania
3) jeśli istnieje plan wykonania - ten plan jest ( ponownie)używane i zapytanie wykonane
4) jeśli nie ma jeszcze planu, ustalany jest plan wykonania
5) plan jest przechowywany w pamięci podręcznej planu w celu późniejszego ponownego wykorzystania
6) zapytanie jest wykonywane
Chodzi o to, że ad hoc SQL i procedury składowane są traktowane nie inaczej .
Jeśli zapytanie SQL ad-hoc prawidłowo wykorzystuje parametry – tak jak powinno, aby zapobiec atakom typu SQL injection – jego charakterystyka wydajności nie różni się i zdecydowanie nie jest gorsza niż wykonanie procedury składowanej.
Procedura składowana ma inne zalety (na przykład nie ma potrzeby przyznawania użytkownikom bezpośredniego dostępu do tabeli), ale pod względem wydajności użycie odpowiednio sparametryzowanych zapytań SQL ad-hoc jest równie wydajne jak przy użyciu procedur składowanych.
Aktualizacja: używanie procedur składowanych w niesparametryzowanych zapytania są lepsze z dwóch głównych powodów:
-
ponieważ każde zapytanie niesparametryzowane jest nowym, innym zapytanie do SQL Server, musi przejść przez wszystkie etapy ustalania planu wykonania, dla każdego zapytania (a tym samym marnowanie czasu - a także marnowanie miejsca na pamięć podręczną planu, ponieważ przechowywanie planu wykonania w pamięci podręcznej planu w końcu nie pomaga , ponieważ to konkretne zapytanie prawdopodobnie nie zostać wykonany ponownie)
-
zapytania niesparametryzowane są zagrożone atakiem SQL injection i należy ich unikać za wszelką cenę