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

Vrátí TSQL rychlejší výsledky než uložená procedura v SQL Server

Ve svých dotazech přidejte OPTION(OPTIMIZE FOR UNKNOWN) (jako poslední klauzule), aby se zabránilo sniffování parametrů. Syntaxi a vysvětlení najdete v dokumentaci Nápovědy k dotazům .

SQL Server při prvním spuštění uložené procedury optimalizuje plán(y) provádění pro parametry, které mu byly předány. To se provádí v procesu, který se nazývá Parameter Sniffing .

Obecně platí, že prováděcí plány jsou ukládány do mezipaměti SQL Serverem, takže SQL Server nemusí pokaždé znovu kompilovat pro stejný dotaz. Při příštím spuštění procedury SQL Server znovu použije plán(y) provádění pro dotazy v něm... Plán(y) provádění však mohou být zcela neefektivní, pokud je (je) voláte s jinými parametry .

Možnost, kterou jsem vám dal, sdělí kompilátoru SQL, že plán provádění by neměl být optimalizován pro konkrétní parametry, ale spíše pro libovolné parametr, který je předán do uložené procedury.

Chcete-li citovat dokumentaci:

V některých případech mohou uložené procedury využívat funkci Parameter Sniffing, v některých případech nikoli. U uložených procedur, které nevyužívají funkci Paramater Sniffing, můžete přidat možnost do každého dotazu, který používá některý z parametrů uložené procedury.



  1. Přejmenování tabulky InnoDB bez aktualizace odkazů na cizí klíč?

  2. Jak najít sloupec použitý v dynamickém dotazu bez provedení celého dotazu

  3. chyba (objekt 'datetime.datetime' nemá atribut 'split') v django 1.11.4

  4. Jak mohu získat seznam databází v Postgresql v pythonu