sql >> Database >  >> RDS >> Sqlserver

Gebruiken CTE's ruimte in tempdb?

Ik zal proberen MSDN niet te kopiëren/plakken

Het maakt niet uit.

Een CTE is onafhankelijk van het uitvoeren van query's:het is slechts een taalconstructie. Zie het als een nette afgeleide tabel of subquery.

Dit betekent dat, behalve recursieve CTE's (zie later), alle CTE's kunnen inline worden gecodeerd. Als u de CTE-code één keer gebruikt, is dit voor de leesbaarheid . Als je de CTE twee keer of vaker gebruikt, is het defensief:je wilt geen fout maken en de afgeleide tabel elk gebruik anders maken.

Als een CTE twee keer of vaker wordt gebruikt, wordt die code twee keer of vaker uitgevoerd. Het wordt niet één keer uitgevoerd en in de cache opgeslagen in tempdb.

Samenvatting:het kan of niet, net alsof de code inline was.

Opmerking:een recursve CTE is gewoon een afgeleide tabel binnen een afgeleide tabel binnen een afgeleide tabel binnen een afgeleide tabel binnen een der... dus hetzelfde is van toepassing.

Je kunt dit zien in Tony Rogersons artikel . Het gebruik van tempdb zou hoe dan ook gebeuren als het inline wordt gecodeerd. Hij merkt ook op dat het gebruik van een tijdelijke tabel beter kan zijn vanwege de "macro"-uitbreiding die ik hierboven heb uitgelegd

Ter info:hetzelfde geldt voor views. Alleen macro's.



  1. Geheugenlimieten in SQL Server 2016 SP1

  2. Entiteiten selecteren door een opgeslagen procedure aan te roepen met Spring Data

  3. SQL - print veel woorden tussen elke kolom met veel voorwaarden

  4. Java SQL-uitzondering:Gesloten resultatenset:volgende, ook al wordt geen verbinding of resultaatset gesloten