sql >> Databáze >  >> RDS >> Sqlserver

Proč je spouštění uložených procedur rychlejší než SQL dotaz ze skriptu?

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



  1. Jak zobrazit datum v britském formátu na SQL Server (T-SQL)

  2. Proveďte tento dotaz na hodiny provozu v PostgreSQL

  3. Jak změnit heslo root mysql

  4. Neaktivní relace v Oracle od JDBC