クエリー リライトは、次の文の両方がTRUEになるように、問合わせQを新しい形式の問合わせQ’に書き換えるプロセスです。
- 両方の問合わせが同じ結果を生成する(ただし、問合わせにORDER BY句がない場合は結果の順序が同じでないことがあり、リライトによって問合わせでエラーが表示または非表示になることがある)。例えば、ゼロ除算エラーは、結合が削除されなかった場合に発生すると回避できる可能性がある。ゼロ除算エラーはまた、述部が交換的かつ関連的な述語評価ルールに基づいて並べ替えられた場合に生じる可能性がある。
Q’は、Qよりも実行速度が速い。
多くの場合、問合わせには複数のクエリー リライトを適用できます。また、クエリー リライトや、問合わせ結果からのフィードバックは、さらなるクエリー リライトの機会を生むきっかけともなります。クエリー リライトは、問合わせの最適化に先立ってクエリー リライト サブシステムで適用することも、問合わせの最適化を実行中に適用することもできます。
以下に、適用可能なクエリー リライトの一部を示します。
- ビューおよび派生テーブルに、基礎となる基本テーブルとカバー インデックスを使用する(ビューの折重ねと呼ばれる方法)。
- 基礎となる基本テーブル、ビュー、または結合操作にハッシュおよび結合インデックスを使用する。
- 外部結合を内部結合に変換
- 内部結合構文を、対応するカンマ構文に変換する
- 不必要な結合をすべて削除する。
- 論理的な実現可能性および推移閉包を使用して、さらなる再作成を容易にするために用語を削除または用語を追加する。
- 述部を簡略化する。
- 射影と述部条件をスプールされたビューに後付けする。
- 集合操作ブランチの排除
- 集約と結合をUNION ALLブランチに結合する
クエリー リライトは、述部後入れ先出しのようなルール ベースにすることも、結合インデックスを使用するように問合わせを書き換えるようなコストベースにすることもできます。