現時点におけるコストベースの最適化プロセスの制限事項¶
クエリで扱うすべての基本ビューの統計情報が存在する場合にのみ、そのクエリにコストベースの最適化プロセスを適用できます。
例: 同じデータベースから作成した基本ビューとして V1
と V2
があり、それとは別のデータベースから作成した基本ビューとして V3
があるとします。 V1
と V2
を結合して得られる派生ビューとして DV
を考えます。 V1
と V2
を同じデータベースから作成しているので、この結合操作はデータベースにプッシュダウンされます。
ここでは、以下のクエリを実行するとします。
SELECT *
FROM DV JOIN V3 ON DV.a = V3.a
このクエリでは、 V1
、 V2
、および V3
の統計情報を収集済みの場合にのみ、コストベースの最適化を適用する利点が得られます。
いずれかの必要なビューの統計情報が不足しているか無効なために、コストベースの最適化を適用できない場合、実行トレースに「Missing statistics or not activated in the following nodes: DV, V3」のようなメッセージが出力されます。
さらに、コストベースの最適化プロセスには以下の制限事項があることを考慮する必要があります。
この最適化は、
WHERE
句でサブクエリを記述しているクエリには適用されません。多次元データベースまたは ITPilot データソースから作成したビューの場合、コストベースの最適化を有効にすることはできますが、推奨されません。コストベースの最適化プロセスでは、それらのタイプのデータソースでは検証されない条件が成立していることを前提としています。したがって、コスト予測によって、想定外の結果が生成されることがあります。
左外部結合、右外部結合、または完全外部結合が関係するネスト結合は、その順序を変更できません。その場合でも、ネスト結合の 2 要素間結合ごとに最適な実行プランの検出が試みられますが、結合はクエリで指定された順序で実行されます。