データベースで変換を実行するために、連鎖した一連のビューを頻繁に使用します。ビュー内には、共通のテーブル式があります。たとえば、次のようになります。
CREATE VIEW TransformationStep1 AS
WITH Transformation1A AS (
SELECT Field1, Field2, Field3, Bla(Field1) AS Calc FROM Table1
),
Transformation1B AS (
SELECT Field1, Field2, Field3, Calc FROM Transformation1A
)
SELECT * FROM Transformation1B
CREATE VIEW TransformationStep2 AS
WITH Transformation2A AS (
SELECT Field1, Calc FROM TransformationStep1
), ....
TransformationStep4 付近のどこかで、クエリ プランがより複雑になるため、ビューが遅くなります。これは想定内であり、問題ありません。
しかし、TransformationStep4 の一部をそれ自体に結合したい場合、オプティマイザーがソース テーブルに戻って何らかのインデックスを探しようとするため、クエリの速度が大幅に低下します。通常はこれで問題ありませんが、一時的な結果を保存してそれに結合したい場合もあります。これは、(ストーリーの設計者である)結果テーブルが非常に小さく、結合する方がはるかに高速であることを知っているためです。それの「プリフェッチ」に対して。
サブクエリがプリフェッチされて結合されるような方法でクエリ プランに影響を与えるクエリ ヒントを作成する方法はありますか? それ以外の場合は、ストアド プロシージャの一時テーブルに頼る必要がありますが、できれば避けたいと思います。
私のデザインが悪いと思うときも、提案をありがとう:-)