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

Proč je CTE mnohem pomalejší než použití dočasných tabulek?

Jak můžete vidět v plánu dotazů, u CTE si engine vyhrazuje právo je použít v podstatě jako vyhledávání, i když se chcete připojit.

Pokud si není dostatečně jistý, může to celé spustit nezávisle, předem, v podstatě vygenerovat dočasnou tabulku... spusťme to jednou pro každý řádek.

To je ideální pro rekurzivní dotazy, které mohou dělat jako kouzla.

Ale vidíte – ve vnořených vnořených smyčkách – kde to může dopadnout strašně špatně.
Odpověď už nacházíte sami, když vyzkoušíte skutečnou tabulku temp.



  1. nelze restartovat postgres na mac os x

  2. Jak vytvořím vnořenou funkci v PL/pgSQL?

  3. @BatchSize chytré nebo hloupé použití?

  4. Vyberte konkrétní sloupec z konkrétního řádku pomocí starého mysql_* API