SQL: Jaký je rozdíl mezi dočasnou tabulkou a dílčím dotazem?


Odpověď 1:

Dočasná tabulka je fyzické úložiště, v paměti a na disku. Dotaz je dotaz. To je do značné míry rozdíl. V rámci dávkového procesu lze dočasnou tabulku kvůli své fyzické povaze v rámci dávky odkazovat několikrát. Na dílčí dotaz lze odkazovat pouze v rámci jeho dotazu. No jistě, můžete to napsat vícekrát, ale musí být vyřešeno pokaždé, když je napsáno. Dočasná tabulka je však úložiště, takže není rekonstituována pokaždé, když na ni odkazujete.

Požádán o odpověď.


Odpověď 2:

Časová tabulka je tabulka, která je založena na aktuální relaci v paměti (dočasná). Po relaci dočasná tabulka zmizí, podobně jako CTE (Common Table Expression), která se používá k vytváření výsledků v paměti (nikoli trvalé).

Poddotaz považujte za dva dotazy sestavené pro dosažení výsledků. Dílčí dotazy mají dva různé druhy: korelovaný dílčí dotaz, kde vnější dotaz je závislý na vnitřním dotazu, a nekorelovaný dílčí dotaz, který lze provést na obou částech nebo na obou částech dílčího dotazu. V závislosti na tom, kde je druhá část dílčího dotazu umístěna na klauzuli, je založena na produkčních výsledcích.

Vezměte prosím na vědomí, že klauzule SELECT může provádět více výsledků řádků, FROM může provádět pouze výsledky jednoho řádku a KDE je založena na filtrování více řádků na výstupech.

Nedoporučoval bych provádět dílčí dotaz, pokud to není jediný způsob, protože SQL Server je optimalizován pro připojení, nikoli dílčí dotazy a mnoho dílčích dotazů se může stát připojením, což zrychluje výkon. Dočasné tabulky jsou skvělé, když nepotřebujete permanentní tabulku ke shromažďování dat při zobrazování výsledků.


Odpověď 3:

@temp tabulka může být dotazována / vložena / aktualizována mnohokrát v nějakém T-SQL kódu (proc nebo func). pod kapotou je to #temp tabulka v dočasné datadase

subquery jsou efemeral vs @ temp tabulka. Je to pouze deklarovaná soutěž z pohledu T-SQL nebo nemodifikovatelná sada řádků z pohledu dat.

Nelze vložit / aktualizovat / odstranit do poddotazu, ale můžete do @temp tabulky

Chcete-li znásobit výběr z poddotazu, musíte použít CTE.