大量のデータ (この例では約 5m 行) を処理するストアド プロシージャがあります。パフォーマンスは大きく異なります。わずか 15 分でプロセスが実行され、4 時間も実行されたことがわかりました。
メンテナンスのため、およびロジックと処理が正しいことを確認するために、SP をセクションに分割しました。
TRUNCATE
後で自動テスト ツールを使用して検証できる作業テーブル (インデックス付き) にデータを入力します。複数のテーブル (これらの作業テーブルの一部を含む) を結合して、別の作業テーブルを作成します。
最終出力が生成されるまで、1 および/または 2 を繰り返します。
私の懸念は、これが単一の SP であるため、最初の実行時に実行計画を取得することです (でもWITH RECOMPILE
)。ただし、その時点では、作業テーブル (Work スキーマの永続テーブル) は空です。
索引付けスキームに関係なく、実行計画が貧弱になることを懸念しています。
作業テーブルのデータが構築された後に再評価された実行計画を利用できるように、SP を分割し、その中から個別の SP を呼び出すことを検討しています。また、EXEC を使用して動的 SQL を実行することへの言及も見ましたが、これRECOMPILE
も明らかに取得される可能性があります。
私はまだSHOWPLAN
許可を得ようとしているので、かなり盲目的に飛んでいます。