SQL Server v podstatě projde těmito kroky, aby provedl jakýkoli dotaz (volání uložené procedury nebo ad-hoc příkaz SQL):
( znovu-)použito a dotaz proveden
4) pokud ještě neexistuje žádný plán, určí se plán provádění
5) tento plán se uloží do mezipaměti plánu pro pozdější opětovné použití
6) dotaz se provede
Jde o to, že ad-hoc SQL a uložené procedury se nejen jinak neliší .
Pokud ad-hoc SQL dotaz správně používá parametry – jak by každopádně měl, aby se zabránilo útokům SQL injection – jeho výkonnostní charakteristiky se neliší a rozhodně není horší než provádění uložené procedury.
Uložená procedura má další výhody (není třeba udělovat uživatelům například přímý přístup k tabulce), ale z hlediska výkonu je použití správně parametrizovaných ad-hoc SQL dotazů stejně efektivní jako pomocí uložených procedur.
Aktualizace: pomocí uložených procedur přes neparametrizované queries je lepší ze dvou hlavních důvodů:
-
protože každý neparametrizovaný dotaz je nový, jiný dotaz na SQL Server, musí pro každý dotaz projít všemi kroky určení plánu provádění (takže plýtvá časem - a také plýtváním mezipaměti plánu, protože ukládání plánu provádění do mezipaměti plánu nakonec opravdu nepomůže , protože tento konkrétní dotaz pravděpodobně nebude být proveden znovu)
-
neparametrizované dotazy jsou ohroženy útokem SQL injection a je třeba se jim za každou cenu vyhnout