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) になることをデータベースに伝えているようです。