ビューとして保存したいクエリがあります。
WITH subquery AS ( SELECT aaa_id, ... FROM table_aaa ... )
SELECT subquery.aaa_id, ... FROM table_bbb JOIN subquery USING ( ... )
;
[注: 実際には、私のクエリはこれよりもはるかに複雑で、いくつかWITH
のサブクエリがあり、多くが実行JOINS
され、すべてJOIN
一緒に編集されています。しかし、問題を解決するために使用できる一般的なガイダンスを探しています。]
このクエリの実行には、全テーブル スキャンが含まれます。WHERE
句には基準が含まれていないため、これは理にかなっています。ただし、次のような句を含めることで、テーブル全体のスキャンのほとんどを排除できます。
WITH subquery AS ( SELECT aaa_id, ... FROM table_aaa ... WHERE aaa_id = :id)
SELECT subquery.aaa_id, ... FROM table_bbb JOIN subquery USING ( ... )
;
WHERE
ただし、ビューを作成するときに条件を適切な場所に配置するオプションがないようです。
CREATE OR REPLACE VIEW vw_my_view AS
WITH subquery AS ( SELECT aaa_id, ... FROM table_aaa ... )
SELECT subquery.aaa_id, ... FROM table_bbb JOIN subquery USING ( ... )
;
SELECT ... FROM vw_my_view WHERE aaa_id = :id
;
この場合、実行計画にはまだ全表スキャンが含まれています。WHERE
句が実際にサブクエリに挿入できることを示唆する方法はありWITH
ますか?