複数の主キーを持つ複数のキャッシュ・インスタンスの動的ロード
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
演算子または等価条件からの単一値(あるいはその両方)の条件を使用します。
ルート表の主キーがx
とy
の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));