2

リフレッシュ時間を変更したいマテリアライズドビューがあります:

REFRESH FORCE START WITH SYSDATE NEXT SYSDATE +1 DISABLE QUERY REWRITE

この中で知りたいことがいくつかあります。

  1. NEXT SYSDATE +1 は何を表しているか (どのように変更するか)
  2. DISABLE QUERY REWRITEとは
    つまり、具体化されたビューに関して、DISABLE QUERY REWRITEとENABLE QUERY REWRITEの比較です。
4

2 に答える 2

4

Oracle のマテリアライズド ビューは、クエリ リライトと呼ばれる機能をサポートしています。これは、データベースがベース テーブルに対する特定のクエリを分析し、マテリアライズド ビューから同じ結果が返されるかどうかを判断し、ベース テーブルの代わりに MV をクエリできることを意味します。これは、場合によっては非常に優れた最適化になります。クエリの書き換えを無効にするようにオラクルに指示することは、この潜在的な最適化を放棄し、MV へのクエリが同じデータを返す場合でも、常にベース テーブルをクエリすることを意味します。

例は次のとおりです。

create materialized view emp_salary
  refresh fast on commit
  as
     select first_name, last_name, salary
     from employee, pay_rate
     where employee.id = pay_rate.employee_id
;

次に、クエリを実行します。

     select last_name, salary
     from employee, pay_rate
     where employee.id = pay_rate.employee_id

クエリ エンジンは、上記の通常の select ステートメントを使用して、マテリアライズド ビューからデータを直接取得できます。費用がかかる可能性のある結合を実行する必要はありません (結合は MV によって既に実行されているため)。これがクエリの書き換えです。

この質問with sysdate nextは、条項が何をするかを説明しています。どうやら、次の更新日が 1 日後 (sysdate +1) になることをデータベースに伝えているようです。

于 2011-12-08T23:12:26.113 に答える
1

マテリアライズド ビューの主な利点の 1 つは、クエリの書き換えを使用できることです。クエリの書き換えを無効にする理由がよくわかりません。

クエリー・リライトにより、実際のディテール表の代わりにマテリアライズド・ビューを使用できます。

NEXT 値は、最初の自動リフレッシュを決定するために Oracle によって使用されます。あなたの例では、作成の1日後に初めて更新され、それ以降は毎日更新されます。

SYSDATE + 6/24 に変更して、6 時間ごとに実行します。

于 2011-12-08T23:12:44.833 に答える