1
私は動的に3つの一時テーブルを作成し、他のテーブルを含む大きなクエリでそれらを結合する必要があるストアドプロシージャを持っています。ストアドプロシージャ内のテンポラリテーブルにプライマリキーを作成する必要がありますか?
これを行うことをお勧めしますか?
私は動的に3つの一時テーブルを作成し、他のテーブルを含む大きなクエリでそれらを結合する必要があるストアドプロシージャを持っています。ストアドプロシージャ内のテンポラリテーブルにプライマリキーを作成する必要がありますか?
これを行うことをお勧めしますか?
これは実際には、それは良いまたは悪い習慣ではありません依存します。パフォーマンスに関するものであれば、実際にはPKは必要なく、クラスタード・インデックス(PKを作成するときにSQL Serverにデフォルトで作成される)が必要です。いずれにしても、一時表の一括挿入を実行する場合は、最初に表をロードして索引を作成することが重要です。索引を作成してからデータを挿入すると、索引が断片化する可能性があります。
個人的には、インデックスの有無にかかわらずプロセスを監視し、最適なオプションを選択します。場合によっては、索引の作成に表スキャンを行うより時間がかかります。しかし、テーブルが大きければ、実際にインデックスを作成してから、必要な変換を実行するほうがずっと良いかもしれません。
私の経験では、あなたが言ったことを強調したいだけです。一時テーブルを読み込み、必要なインデックスを追加します。文字通り私がやったすべてのテストでは、これはインデックス付きのテンポラリテーブルを作成してからデータをロードするよりも高速です。また、計画を見てインデックスを必要とするかどうかを実際に確認することができます。サンプルデータと「実際の計画を表示」オプションを使用して手順を実行すると、問題を簡単に確認できます。 – pmbAustin
@ asemprini87あなたが正しいです、私はクエリプランをチェックし、pkを追加するときに違いがあります、それはどれだけ多くのデータをあなたの一時テーブルで操作しようとしているかによって異なります。 –