番号。
これは、昔(少なくともSQL Server 2000以降ではない)真実だった、または決して真実ではなかったため、DBAは彼の推奨事項を次の推奨事項と混同しただけです。
ストアドプロシージャの開始時に一時テーブルのすべてのDDLステートメント(インデックスの作成など)をグループ化することが重要です。これらのDDLステートメントを一緒に配置することにより、スキーマの変更による不要なコンパイルを回避できます。
このページのこの推奨事項の背後にある理由の別の説明を見つけることができます。
私たちは見てみましょう場合は、このマイクロソフトKB、我々は、ストアドプロシージャの再コンパイルの原因は、以下の(SQL Serverの2005+)のいずれかであることを参照してください。
- スキーマが変更されました。
- 統計が変更されました。
- DNRを再コンパイルします。
- 設定オプションが変更されました。
- 一時テーブルが変更されました。
- リモート行セットが変更されました。
- 閲覧許可の変更。
- クエリ通知環境が変更されました。
- MPIビューが変更されました。
- カーソルオプションが変更されました。
- 再コンパイルオプション付き。
変数を宣言する@table_variable
ことはDDLとしてカウントされないため、変数を宣言すると(テーブル変数(つまり)であっても)これらのイベントをトリガーできません。変数(テーブル変数も含む)は、T-SQLプログラミング専用に使用される一時オブジェクトです。そのため、テーブル変数は統計情報を取得せず、トランザクションにバインドされません。 変数(テーブルまたは非テーブル)の宣言は、プロシージャの再コンパイルをトリガーできません。
一時テーブル(すなわち作成#temp_table
)またはインデックスを、しかし、あるデータベースの物理的な定義に影響を与えDDL。一時テーブルとインデックスは、統計とトランザクション制御を備えた「実際の」オブジェクトであるため、作成すると、上記のリストのイベント1、2、または5のいずれかが発生し、プロシージャの再コンパイルがトリガーされます。