web-dev-qa-db-ja.com

使用するものビューまたは一時テーブル

ビューを使用するか一時テーブルを使用するかを決定するのに問題があります。

プログラムから呼び出すストアドプロシージャがあります。そのSP iで長いクエリの結果を一時テーブルに保存し、列に名前を付け、そのテーブルで別のクエリを作成して結果をラベルまたはグリッドビューなどに保存し、一時テーブルを削除しますまた、クエリ結果をビューに保存し、そのビューでクエリを作成することもできますので、ビュー/一時テーブルを使用する必要があるのはどのような場合ですか?.

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

41
ruedi

クエリが「長く」、複数のクエリの結果にアクセスしている場合は、一時テーブルの方が適しています。

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

SQL Serverでは、テーブル変数(declare @t table . . .)。

単一のストアドプロシージャ内で一時テーブル(またはテーブル変数)を使用することは、セキュリティ、単純さ、および列名に関してほとんど意味を持たないように思われます。セキュリティは、ストアドプロシージャへのアクセスによって処理されます。どちらのソリューションでも列名が必要です。情報がなければ、単純さを判断することは困難ですが、特に複雑であると突き出るものはありません。

42
Gordon Linoff

依存

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

より多くの処理またはより多くのストレージを使用したいですか?

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

単一のプロシージャコール内で使用するためにデータを保存するだけの場合は、一時テーブルが役立ちます。

9
KM.

これは実際には状況に応じた操作固有の質問と回答であり、シナリオの要件によって異なる場合があります。ただし、追加したい小さな点は、ビューを使用して複雑なクエリの結果を保存し、それがGridViewの操作で使用される場合、複雑なビューで更新操作を実行するのが面倒になる可能性があることです。それどころか、一時テーブルはこれに完全に対応できます。

繰り返しますが、適切に処理されない場合、複数のデータベースサーバーのように、ビューがより良い選択になるシナリオがありますが、それはあなたが何をしたいかに依存します。

3
Jayant Shelke

一時テーブルについても言及したいのですが、

同じクエリでTEMPORARYテーブルを複数回参照することはできません。

これにより、自己結合を使用する場合に一時テーブルが不便になります。

1
Moyuan Huang

一般に、ストアドプロシージャ内で同じテーブルを複数回参照する場合は一時テーブルを使用し、異なるストアドプロシージャでテーブルを使用する場合はビューを使用します。

ビューはデータを永続化しません(原則)。ビューを参照するたびに、SQLはビューのロジックを使用して元のテーブルにアクセスします。そのため、ビュー上のビューにビューを構築したり、複雑なロジックを持つビューへの複数の参照を使用したりする必要はありません。

0
user11857493