複数の主キーを持つ複数のキャッシュ・インスタンスの動的ロード

TimesTen Classicでは、単一の表キャッシュ・グループでWHERE句で参照されている複数の主キーを含むSELECT文に対して、複数のキャッシュ・インスタンスを動的にロードできます。

WHERE句に複数の主キー値を指定することで、複数のキャッシュ・インスタンスを動的にロードできます。

  • SELECT文でのみサポートされています。

  • 単一の表キャッシュ・グループでのみサポートされています。

  • 複数の列の主キーの場合、主キーのすべての列をWHERE句で指定する必要があります。

  • WHERE句の各主キーは、IN演算子または等価条件からの単一値(あるいはその両方)の条件を使用する必要があります。

デフォルトでは、DynamicLoadMultiplePKsまたはTT_DynamicLoadMultiplePKs文、トランザクションまたは接続レベルのヒントは1に設定されています。これは、複数の主キーを使用する複数のキャッシュ・インスタンスの動的ロードに対して有効にする必要があります。

  • 文レベルのヒント:

    /*+TT_DynamicLoadMultiplePKs(1)*/
  • トランザクション・レベルのヒント:

    Call ttOptSetFlag(DynamicLoadMultiplePKs, 1)
  • 接続レベルのヒント:

    OptimizerHint = TT_DynamicLoadMultiplePKs(1)

ノート:

『Oracle TimesTen In-Memory Databaseオペレーション・ガイド』「オプティマイザ・ヒントを使用して実行計画を変更する」『Oracle TimesTen In-Memory Databaseリファレンス』「ttOptSetFlag」および『Oracle TimesTen In-Memory Database SQLリファレンス』「オプティマイザ・ヒント」を参照してください。

次の例では、Oracle Database製品表をキャッシュするproducts_cgのキャッシュ・グループを使用します。

CREATE DYNAMIC READONLY CACHE GROUP products_cg FROM
  products(prod_type INT NOT NULL, prod_id BIGINT NOT NULL, prod_name VARCHAR2(100),
                 prod_weight NUMBER, PRIMARY KEY(prod_type, prod_id));

次の例では、複数の主キーを含むWHERE句を持つSELECT文を示しており、複数の製品の名前および重みを返すために、IN演算子または等価条件からの単一値(あるいはその両方)の条件を使用します。

ルート表の主キーがxyの2つの列で構成されている場合、次のSELECT問合せで動的ロードが行われます。

  • 主キーのどちらの列も、IN演算子を含む条件を使用します。

    (x,y) IN ((1,2),(3,4))

    SELECT p.prod_name, p.prod_weight
     FROM products p
      WHERE (((prod_type, p.prod_id) IN ((1,2), (10,20) , (100, 200))));
  • 主キーのどちらの列も、IN演算子を含む条件を使用します。

    (x IN (1,3)) AND (y IN (2,4))

    SELECT p.prod_name, p.prod_weight
     FROM products p WHERE ((p.prod_type IN (1, 10, 100)) AND (p.prod_id IN (2, 20, 200)));
  • 主キーのどちらの列も、単一の値になる等価条件を含む条件を使用します。

    (x=1 OR x=3) AND (y=2 OR y=4)

    SELECT p.prod_name, p.prod_weight
     FROM products p WHERE ((p.prod_type = 10 OR p.prod_type=100) AND 
        (p.prod_id = 20 OR p.prod_id = 200));