web-dev-qa-db-ja.com

すべてのビューに対して定期的にsp_refreshviewを実行しますか?

Microsoft SQL Serverには sp_refreshview と呼ばれるシステムストアドプロシージャがあり、渡されたビューのメタデータを更新します。

すべてのビューでこの手順を定期的に実行することの欠点はありますか? (影響を受けるパフォーマンス統計など)

毎晩、数分ごとに実行できますか?

そうすることによる影響がない場合、参照する基になるエンティティが変更される可能性がある場合に、ビューのメタデータを最新に保つための良い方法のようです。

3
J.D.

彼らが参照する基礎となるエンティティが変化する可能性があります

これは問題であり、ソースで解決する必要があります。

頻繁なメタデータ修正を自動化する必要があるほど頻繁にデータベース内のオブジェクトを更新している場合は、おそらくより良いプロセスの機会があります。

また、テーブルを参照するビューも更新せずにテーブルを更新するべきではありません。したがって、ビューはスキーマ変更ワークフローの一部になるはずです。

ビューでWITH SCHEMABINDINGを使用できます。これにより、スキーマバインディングを意図的に削除せずに参照オブジェクトを変更できないことを明示的に強制します。 (追加のボーナスとして、ビューではSELECT *を使用できません。これは、ここでの問題の一部である可能性があります)。

これについては、次の記事で書きました。

5
Aaron Bertrand