一部のSQLのパフォーマンスを改善することを検討しています。現在、CTEはスクリプトで複数回使用され、参照されています。代わりにテーブル変数を使用して改善を得ることができますか?(コードは関数内にあるため、一時テーブルを使用できません)。
lukesmith
質問する
22470 次
3 に答える
7
あなたは本当にパフォーマンステストをしなければなりません - はい/いいえの答えはありません。上記のリンク先の Andy Living の投稿によると、CTE はクエリまたはサブクエリの省略形です。
同じ関数内で 2 回以上呼び出している場合は、テーブル変数に値を入力してからそこに結合/選択すると、パフォーマンスが向上する可能性があります。ただし、テーブル変数はどこかでスペースを占有し、インデックス/統計を持たないため (テーブル変数で宣言された主キーを除いて)、どちらが高速かはわかりません。
どちらもコストと節約があり、どちらが最善の方法であるかは、取得するデータとその処理方法によって異なります。私はあなたの状況にあり、さまざまな条件下で速度をテストした後、CTEを使用する関数もあれば、テーブル変数を使用する関数もありました。
于 2008-09-15T20:17:54.313 に答える
3
おそらくそうではありません。CTE は、ツリー構造のデータのクエリに特に優れています。
于 2008-09-10T14:30:02.070 に答える