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

OPTION (RECOMPILE) je vždy rychlejší; Proč?

Někdy se to stává pomocí OPTION(RECOMPILE) dává smysl. Podle mých zkušeností je to schůdná možnost pouze tehdy, když používáte dynamický SQL. Než prozkoumáte, zda to má ve vaší situaci smysl, doporučil bych vám znovu vytvořit statistiky. To lze provést spuštěním následujícího:

EXEC sp_updatestats

A pak znovu vytvořit svůj prováděcí plán. To zajistí, že při vytvoření plánu realizace bude používat nejnovější informace.

Přidání OPTION(RECOMPILE) znovu sestaví plán provádění pokaždé, když se váš dotaz spustí. Nikdy jsem neslyšel, že by to bylo popsáno jako creates a new lookup strategy ale možná jen používáme různé výrazy pro stejnou věc.

Když je vytvořena uložená procedura (předpokládám, že voláte ad-hoc sql z .NET, ale pokud používáte parametrizovaný dotaz, skončí to jako uložené volání procedury), SQL Server se pokusí určit nejúčinnější plán provádění pro tento dotaz. na základě dat ve vaší databázi a předávaných parametrů (sniffování parametrů) a poté tento plán uloží do mezipaměti. To znamená, že pokud vytvoříte dotaz tam, kde je ve vaší databázi 10 záznamů, a poté jej provedete, když bude k dispozici 100 000 000 záznamů, plán provádění v mezipaměti již nemusí být nejúčinnější.

Stručně řečeno - nevidím žádný důvod, proč by OPTION(RECOMPILE) tady by to bylo přínosem. Mám podezření, že stačí aktualizovat statistiky a plán provádění. Přestavba statistik může být nezbytnou součástí práce DBA v závislosti na vaší situaci. Pokud máte i po aktualizaci statistik problémy, navrhoval bych zveřejnit oba plány provádění.

A abych odpověděl na vaši otázku – ano, řekl bych, že je velmi neobvyklé, aby vaší nejlepší možností bylo znovu zkompilovat plán provádění pokaždé, když spustíte dotaz.



  1. Jak zkrátit TABLE v Oracle

  2. SQL dotaz pro stromovou tabulku

  3. změnit sloupec přejmenování tabulky v databázi Oracle

  4. Jak vložit blob do databáze pomocí SQL Server Management Studio