3

一部のSQLのパフォーマンスを改善することを検討しています。現在、CTEはスクリプトで複数回使用され、参照されています。代わりにテーブル変数を使用して改善を得ることができますか?(コードは関数内にあるため、一時テーブルを使用できません)。

4

3 に答える 3

7

あなたは本当にパフォーマンステストをしなければなりません - はい/いいえの答えはありません。上記のリンク先の Andy Living の投稿によると、CTE はクエリまたはサブクエリの省略形です。

同じ関数内で 2 回以上呼び出している場合は、テーブル変数に値を入力してからそこに結合/選択すると、パフォーマンスが向上する可能性があります。ただし、テーブル変数はどこかでスペースを占有し、インデックス/統計を持たないため (テーブル変数で宣言された主キーを除いて)、どちらが高速かはわかりません。

どちらもコストと節約があり、どちらが最善の方法であるかは、取得するデータとその処理方法によって異なります。私はあなたの状況にあり、さまざまな条件下で速度をテストした後、CTEを使用する関数もあれば、テーブル変数を使用する関数もありました。

于 2008-09-15T20:17:54.313 に答える
3

おそらくそうではありません。CTE は、ツリー構造のデータのクエリに特に優れています。

于 2008-09-10T14:30:02.070 に答える