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

Použití s ​​vs deklarovat dočasnou tabulku:výkon / rozdíl?

@table syntaxe vytvoří proměnnou tabulky (skutečnou tabulku v tempdb ) a zhmotňuje do něj výsledky.

WITH syntaxe definuje Běžný tabulkový výraz který není zhmotněný a je pouze vloženým pohledem.

Většinu času by bylo lepší použít druhou možnost. Zmiňujete, že je to uvnitř funkce. Pokud se jedná o TVF, pak většinou chcete, aby byly inline a nikoli více příkazy, aby je mohl optimalizátor rozšířit – to by okamžitě znemožnilo použití proměnných tabulky.

Někdy však (řekněme, že základní dotaz je drahý a chcete se vyhnout tomu, aby byl spouštěn vícekrát) můžete zjistit, že materializace mezivýsledků v některých konkrétních případech zlepšuje výkon. Existuje momentálně žádným způsobem vynucení tohoto pro CTE (bez vynucení průvodce plánem alespoň )

V takovém případě máte (obecně) 3 možnosti. @tablevariable , #localtemp tabulka a ##globaltemp stůl. Ve funkci je však povoleno používat pouze první z nich.

Další informace týkající se rozdílů mezi proměnnými tabulky a tabulkami #temp viz zde .



  1. Modelování databáze pro evidenci tržeb. Část 1

  2. Najděte cizí klíč odpovídající více hodnotám řádků

  3. Mysql Create Database se speciálními znaky v názvu

  4. Existuje nějaký ekvivalent k Postgresql KAŽDÉ agregační funkci na jiných RDBMS?