Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Използване с vs деклариране на временна таблица:производителност / разлика?

@table синтаксис създава таблична променлива (действителна таблица в tempdb ) и материализира резултатите към него.

WITH синтаксис дефинира общ табличен израз който не е материализиран и е просто вграден изглед.

През повечето време би било по-добре да използвате втората опция. Споменавате, че това е вътре във функция. Ако това е TVF, тогава през повечето време искате те да са вградени, а не мулти изрази, така че да могат да бъдат разширени от оптимизатора - това незабавно ще забрани използването на променливи на таблицата.

Понякога обаче (да кажем, че основната заявка е скъпа и искате да избегнете многократното й изпълнение) може да определите, че материализирането на междинните резултати подобрява производителността в някои конкретни случаи. Има в момента няма начин за принудително налагане на това за CTE (без да се налага поне ръководство за план )

В този случай вие (като цяло) имате 3 възможности. @tablevariable , #localtemp таблица и ##globaltemp маса. Само първото от тях обаче е разрешено за използване във функция.

За допълнителна информация относно разликите между променливите на таблицата и #temp таблиците вижте тук .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. codeigniter и odbc връзки

  2. Вложени транзакции в Sql сървър

  3. Милисекунди от DateTime в SQL Server и C# не са еднакви

  4. SQL заявка - обединяване на резултатите в един низ

  5. Как мога да вляза в съхранена процедура на SQL Server от моя C# код?