• EXISTS Subqueries は通常、 に書き換えられ、 式の不要な評価を防ぎます;SELECT 1 FROM ...SELECT
  • SOMEIN例えば、col > SOME (SELECT col1 FROM table)col > (SELECT min(col1) FROM table)になります;
  • ソースにプッシュされない無相関のEXISTクエリおよびスカラー・サブクエリは、ソース・コマンドの形成前に事前評価できます;
  • DELETEまたはUPDATEクエリで使用される CORRESPONDING サブクエリで、対応するDELETE / UPDATEの一部としてプッシュされない場合、CData Virtuality Server は行ごとの補正処理を実行します。これは、影響を受けるテーブルに主キーがある場合にのみ発生します。そうでない場合は例外がスローされます;
  • WHEREまたはHAVINGIN、数量化比較、スカラーサブクエリ比較、 EXIST 述語は、サブクエリの前に MJ(merge join)、DJ(dependent join)、NO_UNNEST(no unnest)ヒントを取ることができます。可能であれば、MJヒントはトラディショナル、セミジョイン、アンチセミジョインマージジョインを使用するようにオプティマイザに指示します。DJMJヒントと同じですが、可能であれば従属結合の独立側としてSubqueryを使用するようにOptimizationに指示します。NO_UNNESTヒントは他のヒントに優先し、SubqueryをそのままにするようOptimizationに指示します。
    以下にそれぞれの例を示します:
    1.MERGE Joinのヒント:

    SELECT col1
    FROM schm.tbl
    WHERE col2 IN /*+ MJ*/ (SELECT col1 FROM schm2.tbl2)

    2. Dependent Joinのヒント:

    SELECT col1
    FROM schm.tbl
    WHERE col2 IN /*+ DJ */ (SELECT col1 FROM schm2.tbl2)

    2. NO_UNNESTヒント

    SELECT col1
    FROM schm.tbl
    WHERE col2 IN /*+ NO_UNNEST */ (SELECT col1 FROM schm2.tbl2)

    Be sure that there is no whitespace between /* and +> when using e.g. /*+ MJ */.

    Configure your SQL client not to remove multi-line comments.
    Here is how to do this in Squirrel: Session -> Session Properties -> SQL -> Remove multi-line comment (/* ... */).

  • system propertyorg.teiid.subqueryUnnestDefaultは、Optimizations がデフォルトで Subqueries をアンネストするかどうかを制御します。デフォルトはFALSEです。TRUEの場合、ほとんどの非負WHEREまたはHAVING句の非負EXISTSまたはIN Subquery述語は、従来のMerge Join、または、antijoinまたはsemijoinの変形に変換することができます;
  • WHERE句 と システムプロパティ が に設定されている場合、またはサブクエリが ヒントを持っている場合、半結合のセマンティクスを持つ従来の結合に書き換えることができる述語は保持することができます;EXISTINorg.teiid.subqueryUnnestDefaultTRUEMJ
  • コスト計算が有利な場合、プランナーは常にアンチジョインまたはセミジョインバリアントに変換します。必要であれば、ヒントを使用してこの動作を上書きしてください;
  • EXISTおよびプッシュダウンされず、Merge Joinに変換されないスカラー副問い合わせは、それぞれ暗黙的に1行と2行の結果行に制限されます;
  • Nestedループ結合へのSubquery述語の変換はまだ使用できません。