2011-01-11 10 views
0

誰かがプロセスのスピードを上げるためのソリューションを提供できますか?私たちは、10個のテーブルすべての組合であるレポートに使用されるビューを持っています。ビューには1億8000万行があります。個々の列の異なる値のリストを生成したいと考えています。レポートツールによって生成された現在のSQLは、ビュー上でselect distinctを実行し、10分かかります。好ましくは、解決策は自動的に更新される。私たちは、DB2 UD V8のMQTを共用体として作成しようとしています。どんな提案も大歓迎です。大規模なビューで多数の重複値を含むテーブルスキャンを避けるための提案

チャールズ。

+0

個別リストのマテリアライズド・ビューを作成できますか? – tster

+0

マテリアライズド・ビューは、DB2マテリアライズ照会表のOracle用語です。私は、選択して別名を実行して直ちにリフレッシュしようとすると、次のエラーが表示されます。 "REFRESH IMMEDIATEが指定されている場合、全選択には含まれていてはなりません。 o DISTINCTを選択してください。 – Charles

答えて

0

DB2 8.2では、即時リフレッシュMQTには多くの制約があり、それらは基本表に書き込むアプリケーションに大きな影響を与えます。つまり、 MQTを使用することができます。 (DB2 8.2)で動作します。このため、NOT NULLとして定義されなければならないから

select yourcolumn, count(*) as ignore 
from union_all_view 
group by yourcolumn 

列(yourcolumn):しかし、代わりにDISTINCT SELECT使用するのでは、などのクエリを見て何かを作ってみてください。ユニオンのすべてのビューに対してSELECT DISTINCTを発行しても、オプティマイザはこのMQTを選択しない可能性があります。そのため、MQT(またはその上に定義されたビュー)を直接照会する必要があります。 MQTの「無視」列を無視します。これはDB2専用です。本当にそれを見たくなければ、MQTの上にvewを作成することができます。

しかし、これは実際にはデータベース設計上の問題です。特定の列で一意の値を見つけるために、1億8千万行のデータをスキャンする必要があるのはなぜですか?これらの値は、それぞれの10個の基本表から外部キーが定義された状態で、自分の表にすでに存在していませんか?

関連する問題