私はSQLで作成したユーザービューを外部のアプリケーションで作成しています。これは、ユーザーの勤務経験年数を雇用記録に従って返します。SQL Serverの外部適用により大きなCPU負荷が発生する
アクティビティモニター(SQLエンタープライズマネージャー)でSQLステートメントのコストを監視したところ、ビューのこの部分が実行計画のCPUコストの25%を占めていると言います。
私は、このメトリックを追加のオーバーヘッドなしでビューに持っていくより効果的な方法を試しています。 HERE
が適用されます...
SELECT *
FROM users U <BLAH BLAH BLAH> OUTER apply
(SELECT COALESCE (Year(Getdate()) - Min(StartYear), 0) AS YearsWorkExp
FROM dbo.job_history
WHERE (userid = U.userid)) AS WorkExp
いずれにしても、実際には選択してからOUTER APPLY内のクエリで複数のレコードを結合していますか? will job_history(可能性一人の従業員ごとに複数のレコードがありますか? – Cato
ジョインを使用できる関数を使用していない場合は、関数呼び出しに外部適用が必要です。 – ajeh