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

Používají CTE nějaké místo v databázi tempdb?

Pokusím se nekopírovat/vkládat MSDN

Na tom nezáleží.

CTE je nezávislý na provádění dotazu:je to pouze jazyková konstrukce. Představte si to jako přehlednou odvozenou tabulku nebo poddotaz.

To znamená, že kromě rekurzivních CTE (viz dále) všechny CTE mohou být kódovány inline. Pokud kód CTE použijete jednou, je to kvůli čitelnosti . Pokud použijete CTE dvakrát nebo vícekrát, pak je defenzivní:nechcete udělat chybu a mít odvozenou tabulku při každém použití jinou.

Pokud je CTE použit dvakrát nebo vícekrát, bude tento kód proveden dvakrát nebo vícekrát. Nebude jednou spuštěn a uložen do mezipaměti v tempdb.

Shrnutí:může nebo nemusí, stejně jako kdyby byl kód vložený.

Poznámka:rekurzivní CTE je jednoduše odvozená tabulka uvnitř odvozené tabulky uvnitř odvozené tabulky uvnitř odvozené tabulky uvnitř der... takže platí to samé.

Můžete to vidět v Článek Tonyho Rogersona . K použití tempdb by stejně došlo, pokud by byl kódován inline. Poznamenává také, že použití dočasné tabulky může být lepší díky rozšíření „makro“, které jsem vysvětlil výše

FYI:totéž platí pro pohledy. Jen makra.



  1. Jak mohu upozornit svůj program, pokud v ní byla přidána/aktualizována/vymazána konkrétní databázová tabulka?

  2. Můžeme předat parametry pohledu v SQL?

  3. Nemohu použít alias v sql delete

  4. Odstranění non-alphaNumerics v MySQL