2009-05-11 17 views
4

多くのクエリで結合される6つのテーブルがあります。すべてのテーブルを結合して作成したビューでは、パフォーマンスが向上しますか?パフォーマンスを向上させるための選択肢はありますか?データベースとしてoracleを使用しており、結合されたすべての列が索引付けされています。パフォーマンスが向上しますか?

+1

どのデータベースプラットフォームを使用していますか?パフォーマンスを向上させる方法はたくさんあります。それらの多くはプラットフォーム固有のものです。例えば、マテリアライズド・ビュー、索引付けされたビュー... – RedFilter

答えて

7

ビュー自体がパフォーマンスを向上させることはありません。あなたが使用しているデータベースエンジンに応じて、ビューでできることがあります。

SQL Serverでは、ビューにインデックスを付けることができます(ビューはさまざまな要件に適合していることが前提です)。これにより、パフォーマンスが大幅に向上します。

どのDBMSを使用していますか?

編集

は、オラクルでは、マテリアライズド・ビューを作成することができます。ここにあなたを始めるべきリンクがあります。私はオラクルを知らないので、本当にリンクしか提供できません。

http://searchoracle.techtarget.com/expert/KnowledgebaseAnswer/0,289625,sid41_gci909605,00.html

+0

SQL Serverで詳細を提供できますか? – kbvishnu

3

正しいインデックスは、多くのテーブルに参加する際のパフォーマンスを向上させるための鍵です。

インデックスを追加するとパフォーマンスが向上する可能性があります。パフォーマンスが低下する可能性があります。多くは、データベース設計と、ビューが基づいている実際のクエリに依存します。一度ビューを実行すると、使用するすべての人が同じ6つのテーブルを参照していることが保証されます。これは、クエリに応じてプラスまたはマイナスです(ビューに基づくすべてのクエリが実際には6つのテーブルすべてを必要とするわけではありません)。

私が見る最初のことは、外部キーフィールドが現在インデックスされているかどうかです。主キーは作成時にインデックスが与えられますが、外部キーは作成されません。それらは結合で使用されるため、パフォーマンスのために索引付けする必要があります。

3

ビューの仕組みに注意してください。実行時にビューのクエリを実行します。これらは事前キャッシュされていないため、インデックスがなくても基本的には関数呼び出しです。

パフォーマンスを向上させるために、テーブルとビューでインデックスを頻繁に使用します。ショットガンをしないでください。しかし、うまく設計されたインデックスは、あなたのパフォーマンスのために昼夜を取ることができます。

0

また、データベースによって異なります。 RDMSが基準に基づいて基礎となるクエリを分析しない場合、RDMSはまったく機能しない可能性があります。

ほとんどの現在のRDMSはクエリの書き換えを行います(6または7のような以前のバージョンのSQL Serverはこれをしなかったと思います)。クエリの観点からビューを分離してから、すべてを書き直しますその最適化技術に基づいています。

ビューを使用するクエリのさまざまな反復では、プランをキャッシュしてそのようなパフォーマンスを得ることができます。

少なくとも、理論的には(データベースのオプティマイザに依存して)、ビューを使用することはクエリ全体を書くことと違いはありません。

関連する問題