4

たとえば、さまざまなイベントに関する情報を保持するテーブルがあります

CREATE TABLE events (
    id int not null primary key, 
    event_date date, ...
) 

すべてのクエリの90%が今日のイベントにのみアクセスすることに気づきました。古い行は履歴として保存され、最終的にアーカイブテーブルに移動されます。
ただし、イベントテーブルはまだ大きいので、次のようなマテリアライズドビューを作成してパフォーマンスを向上させることができるWHERE event_date = trunc(sysdate)でしょevent_dateうか。まったく許されますか?

ありがとう

4

1 に答える 1

4

はい、これは許可されています。「主キーマテリアライズドビュー」を参照してください。

主キーのマテリアライズド・ビューにはサブクエリが含まれている場合があるため、リモートのマテリアライズド・ビュー・サイトで行のサブセットを作成できます。

および「複雑なマテリアライズドビュー」

更新がめったになく、クエリのパフォーマンスを向上させたい場合は、方法A(複雑なマテリアライズドビュー)を使用してください。
定期的に更新し、クエリのパフォーマンスを犠牲にする可能性がある場合は、方法B(単純なマテリアライズドビュー)を使用します。

http://download.oracle.com/docs/cd/B10500_01/server.920/a96567/repmview.htm _

あなたの例では、これが「複雑なマテリアライズドビュー」ではない可能性が高いです。

CREATE MATERIALIZED VIEW events_today REFRESH FAST AS
SELECT * FROM EVENT WHERE event_date = trunc(sysdate);

試してみて、OracleがREFRESH FAST句でそれを受け入れるかどうかを確認してください。

編集-別のオプション:

DB Edition(Enterprise + Partitioning)およびバージョン(11gR2)に応じて、INTERVALパーティショニングと呼ばれる新しいOracle機能を使用して、既存のテーブル内に「デイリーパーティション」を定義できます。このようにして、データを効果的に複製することなく、ほとんどのクエリが大幅に高速化されます。http: //www.oracle.com/technetwork/database/options/partitioning/twp-partitioning-11gr2-2009-09-130569.pdfを参照してください。

于 2011-08-23T03:56:04.783 に答える