Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Czy CTE używa miejsca w tempdb?

Postaram się nie kopiować/wklejać MSDN

To nie ma znaczenia.

CTE jest niezależne od wykonywania zapytania:jest tylko konstrukcją językową. Pomyśl o tym jako o zgrabnej tabeli pochodnej lub podzapytaniu.

Oznacza to, że z wyjątkiem rekurencyjnych CTE (patrz dalej), wszystkie CTE mogą być kodowane inline. Jeśli użyjesz kodu CTE raz, służy to czytelności . Jeśli użyjesz CTE dwa lub więcej razy, jest to defensywne:nie chcesz popełnić błędu i za każdym razem używaj innej tabeli pochodnej.

Jeśli CTE zostanie użyte dwa lub więcej razy, kod zostanie wykonany dwa razy lub więcej. Nie zostanie wykonane raz i zapisane w pamięci podręcznej w tempdb.

Podsumowanie:może, ale nie musi, tak jak w przypadku kodu wbudowanego.

Uwaga:rekursywne CTE to po prostu tabela pochodna wewnątrz tabeli pochodnej wewnątrz tabeli pochodnej wewnątrz tabeli pochodnej wewnątrz der... więc to samo dotyczy.

Możesz to zobaczyć w Artykuł Tony'ego Rogersona . Użycie tempdb i tak by się zdarzyło, gdyby zostało zakodowane inline. Zauważa również, że użycie tabeli tymczasowej może być lepsze ze względu na rozszerzenie „makro”, które wyjaśniłem powyżej

FYI:to samo dotyczy widoków. Tylko makra.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Podstawy i użycie podpowiedzi NOLOCK w SQL Server

  2. Win32Exception (0x80004005):Przekroczono limit czasu operacji oczekiwania

  3. Jak ustawić domyślny wiersz dla zapytania, które nie zwraca żadnych wierszy?

  4. Prawidłowa kolejność instalacji programu Visual Studio 2010 z SQL Server 2008 i Office 2007?

  5. Czy kolumna klucza podstawowego Sequential Guid powinna być indeksem klastrowym?