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

Używając z vs deklaruj tabelę tymczasową:wydajność / różnica?

@table składnia tworzy zmienną tabeli (rzeczywista tabela w tempdb ) i materializuje do niego wyniki.

WITH składnia definiuje Wspólne wyrażenie tabelowe który nie jest zmaterializowany i jest tylko wbudowanym widokiem.

W większości przypadków lepiej byłoby skorzystać z drugiej opcji. Wspomniałeś, że to jest wewnątrz funkcji. Jeśli jest to TVF, przez większość czasu chcesz, aby były one inline, a nie multi-instrukcje, aby mogły zostać rozszerzone przez optymalizator - to natychmiast uniemożliwiłoby użycie zmiennych tabeli.

Czasami jednak (powiedzmy, że zapytanie bazowe jest drogie i chcesz uniknąć wielokrotnego wykonywania) możesz stwierdzić, że zmaterializowanie wyników pośrednich poprawia wydajność w niektórych szczególnych przypadkach. Istnieje obecnie nie ma mowy wymuszenia tego dla CTE (bez wymuszania przynajmniej przewodnika po planie )

W takiej sytuacji (ogólnie) masz 3 opcje. @tablevariable , #localtemp tabela i ##globaltemp stół. Jednak tylko pierwszy z nich jest dozwolony do użycia wewnątrz funkcji.

Aby uzyskać więcej informacji na temat różnic między zmiennymi tabel a tabelami #temp zobacz tutaj .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SharePoint 2010 — zmiana z Kerberos na uwierzytelnianie oparte na oświadczeniach

  2. Zapytanie aktualizujące SQL za pomocą złączeń

  3. Pobierz>901 wierszy z połączonego serwera SQL Server 2008 do Active Directory

  4. Określ, czy parametr SP ma wartość domyślną w T-SQL

  5. Konwertuj format daty na format DD/MMM/RRRR w SQL Server