2011-10-08 11 views
0

複数のテーブルのデータを1つのテーブルのように照会したいとします。すべての列が異なるが、一致する列が5つある、約10の表があります。理想的には、私は共有の列が1つのテーブルに入るようにテーブルを再設計し、私は他のテーブル間の関係を作成することができます。残念ながら、これはオプションではありません。既存のテーブルを変更することはできません。複数のテーブルに存在するインデックスデータ

データにアクセスしてインデックスを作成する最良の方法は何でしょうか?私はUNION ALLを使用してビューやストアドプロシージャを作成することを考えていました。

SELECT COL1, COL2, COL3 FROM TABLE1 
UNION ALL 
SELECT COL1, COL2, COL3 FROM TABLE2 
UNION ALL 
SELECT COL1, COL2, COL3 FROM TABLE3 
UNION ALL 
SELECT COL1, COL2, COL3 FROM TABLE4 

しかし、どのようにインデックスを作成しますか?ビューやストアドプロシージャーが最適でしょうか?あるいはまったく別のアプローチですか?

+0

既存のテーブルにインデックスを追加することはできますか? –

答えて

0

SQL Serverにはindexed viewsがありますが、ビューではUNIONはサポートされていません。

あなたはそれが1であるかのように、すべてのテーブルの上にデータを照会しなければならない、とあなたは現在のスキーマを変更することはできませんし、私は

0
などインデックスを作成することができ、別の単一のテーブルを維持するためにトリガーを使用してお勧めしたい場合

労働組合と一緒に見ることはすべて仕事をするでしょう。ビューに関与する個々のテーブルを索引付けする必要があります。実際にはパフォーマンスが向上します(オプティマイザは、特定のクエリでテーブルをスキャンする必要がないことがわかるかもしれません)。

保存されたprocは、from節でそれを使用することはあまり簡単ではないので(しかし、 'SELECT * FROM OPENQUERY(YourServer、' SET FMT_ONLY OFF EXEC stored_proc ')のようなOPENQUERYでも可能です)結果を生成する際に手続き的なロジック(例:複雑なレポート)が必要な場合は、パフォーマンスが向上します。

関連する問題