0

私が理解していることから、テーブル式は永続的ではありません。つまり、外部コードでのテーブル式へのすべての参照は、定義への繰り返しの呼び出しです。これは、テーブルを永続化し、毎回再評価することを避けるために、テーブル変数/一時テーブルが登場する場所です。繰り返しを避けるには、テーブル変数/一時テーブルの方が適しているようです。メソッドを呼び出す代わりに、プログラミングにアナロジーを作成しました

myMethod()

毎回、変数を割り当てたい

int res = myMethod()

myMethod() を複数回呼び出さないようにします。myMethod()はテーブル式に類似しており、res はテーブル変数/一時テーブルです。

では、なぜテーブル式を使用するのでしょうか? 他の 2 つの代わりにテーブル式を使用する必要があるシナリオはどれですか? およびその逆?

ありがとうございました。

4

1 に答える 1

1

私の経験から言えば

  • 一時テーブルに 1,000 万件のレコードを挿入し、それを 1 回だけ使用するとします。時間、メモリ、CPUの無駄になります。巨大な一時テーブルをより効率的に使用するには、一時テーブルの上にインデックスを作成する必要もあります。一方、CTE は既存のテーブルのインデックスを使用します。
  • スカラー式から列をグループ化したい場合。たとえば、row_number() 列をグループ化します。
  • 複雑なクエリの読みやすさ
  • そしてもちろん、非常にクールな再帰クエリを書くことができます
于 2015-05-08T17:38:16.713 に答える