2013-06-03 2 views
27

ビューまたはテンポラリテーブルのどちらを使用するかを決定するのに問題があります。何を使用しますか?ビューまたはテンポラリテーブル

私はプログラムから呼び出すストアドプロシージャを持っています。そのSPでは、長いクエリの結果を一時テーブルに格納し、列に名前を付けて、そのテーブルに別のクエリを作成して、結果をラベルやグリッドビューなどに格納し、Temp Tableを削除します。また、クエリ結果をビューに格納し、そのビューに対してクエリを実行することもできます。だから、私はビュー/テンポラリテーブルを使用しなければなりません。

私の研究によれば、ビューには次の利点があります。セキュリティ、シンプルさ、列名の指定。私の一時的なテーブルもそれをすべて満たしています(私の意見によると)。

+1

あなたの目標を述べて、あなたの重要性の点でランク付けしない限り、これは本当に一般的な質問です。 – Tim

+0

この質問の可能な回答は、どちらを試してみてどちらがうまくいくかを確認する必要があります。 –

答えて

28

クエリが "long"で、複数のクエリから結果にアクセスしている場合は、一時テーブルが最適です。

一般的に、ビューはselectステートメントのショートカットです。 Ifは結果が実行され処理されたことを意味しません。ビューを使用する場合は、使用するたびに結果を再生成する必要があります。後でビューを実行する方が効率的です(ビューのクエリで使用されるページがキャッシュにあるため)、一時テーブルは実際に結果を格納します。

SQL Serverでは、テーブル変数(declare @t table . . .)を使用することもできます。

単一のストアドプロシージャ内でテンポラリテーブル(またはテーブル変数)を使用すると、セキュリティ、シンプルさ、およびカラム名にはほとんど影響しません。セキュリティは、ストアドプロシージャへのアクセスによって処理されます。どちらのソリューションにも列名が必要です。シンプリシティは情報なしで判断するのは難しいですが、特に複雑なものはありません。

6

ビューを依存して一時テーブルに結果を保存しながら、あなたの「長いクエリ」の処理にそれが実行されるたびに複製する必要があります。

これ以上の処理やストレージを使用したいですか?

処理に役立ついくつかのビュー値(永続インデックス)を保存できますが、実際にこれを調べるには十分な情報を提供していません。

単一のプロシージャコールで使用するためのデータを格納するだけであれば、一時テーブルを使用する方法があります。

2

これは実際には状況に応じた動作の質問と回答で、シナリオの要件によって異なる場合があります。 しかし、私が追加したいと思っている点は、複雑なクエリの結果を格納するためにビューを使用していて、GridViewの操作で使用されている場合、複雑なクエリの結果を格納する場合、再生回数これとは逆に、Temp Tableではこれを完全に満たすことができます。

[ビューが適切に処理されない場合、複数のデータベースサーバーのように]ビューがより良い選択肢になるシナリオがありますが、実行する内容によって異なります。

関連する問題