-1

一連のネストされたSQLビュー(3レベルの深さ)で行われた集計に基づいて情報をグラフ化するレポートWebアプリケーションがあります。最後のネストされたビューは、エンティティフレームワークコード内のストアドプロシージャから呼び出されます。これによるパフォーマンスの低下は、データの取得に苦労してタイムアウトするため、犠牲になり始めています。

SQLプロファイラーには360,000以上の読み取りとCPU@28313があります。さらに、タイムアウトせずにSQLで第3レベルのビューを開くことさえできません。

最初のビューは、いくつかのテーブルと集計からデータを収集するだけです。2つ目は、日付の違い、タイムゾーンの調整、平均など、このデータに対して計算を実行します。3つ目は、これらの計算を確定し、必要なデータの要約を示します。3番目のビューは、私が照会したビューです。

一般に、ネストされたビューを解くための良い戦略は何ですか?特に、SQLサーバーで実行する必要がある計算があり、データが特定のレベルに結合された後にのみ実行できる場合、ネストされたビューよりも優れた戦略は何ですか?

あなたが提供できるどんな助けにも感謝します!

4

1 に答える 1

1

任意のビューをサブクエリとして含めることができますが、それ自体がこの場合のパフォーマンスに役立つとは思えません。これにより、ビューの一部を確認し、共有部分をテーブル変数または一時テーブルに配置できるようになります。

より多くの情報を共有できれば、それが役立つかもしれません。

私はあなたにアドバイスします:

  1. それらのビューをインライン化するので、すべてが目の前にあります
  2. (コンパイルされていない!!)パフォーマンスの問題がどこにあるかを確認するために、少しずつ切り詰めてください。
  3. パフォーマンスの問題を修正する
  4. コンパイルしたら、パフォーマンスの問題が同じ場所にあることを願っています。
于 2013-01-14T14:07:20.647 に答える