注:Oracle 11gR2標準バージョン(パーティション化なし)
したがって、約2,700万件のレコードを含むテーブルからレポートを作成するプロセスを構築する必要があります。私が直面しているジレンマは、このテーブルは変更できないサードパーティのテーブルであるため、このテーブルから独自のインデックスを作成できないという事実です。そこで、マテリアライズドビューを使用して実験を開始しました。このビューでは、独自のインデックス、または基本的には複製であり、必要に応じて切り捨てて再入力する物理テーブルを作成できます。
MATビューの利点は、基本的に「ライブ」テーブルから取得することです。したがって、使用前に更新する限り、不一致を心配する必要はありません。問題は、更新にかなりの時間がかかるように見えることです。 。次に、物理テーブルアプローチを試してみることにしました。ここでは、切り捨てと再入力を試み(約10分かかります)、次にインデックスを再構築します(さらに10、ギブまたはテイクします)...「新しい」レコードのみで更新も試みましたを実行することによって:
INSERT... SELECT where NOT Exists (Select 1 from Table where PK = PK)
インデックスや並列処理などに関係なく、ほぼ10分かかります...
誰かがこの量のデータ(これは増え続けるでしょう)を処理し、うまく機能し、効率的に機能するアプローチを見つけなければなりませんでしたか?
ビューが機能しないようです....プライマリテーブルのインデックスを微調整できないため、これら2つのオプションが残っているので、ヒントの提案をいただければ幸いです...このプロセスの全体的な目的は次のとおりです。レポート作成を「高速化」するためですが、ある領域でパフォーマンスが向上している場合、移動する必要のあるデータの量を考えると、他の領域では失われてしまいます。他に他のオプションはありますか:
- テーブルの切り捨て/入力、インデックスの再構築
- PKが存在しないプライマリテーブルからセカンダリテーブルにデータを入力します
- マテリアライズド・ビュー(リフレッシュ、索引の再構築)
- ライブテーブルからプルするビュー(新しいインデックスなし)
提案を事前に感謝します.....
2番目のオプションで挿入を実行するときにインデックスなどを使用できないようにすると、「選択としてテーブルを作成...」を実行すると「挿入...選択」よりもパフォーマンスが向上するかどうかを誰かが知っていますか?