Specifying the Dynamic Load for a Hybrid Cache Group

For hybrid cache groups, you can specify a derived table within the FROM clause of the SELECT statement or include more than one table of the same hybrid cache group in the same query.

Dynamic load occurs after evaluating the rules specified in Guidelines for Dynamic Load.

Using a Derived Table

For hybrid cache groups, you can specify a derived table within the FROM clause of the SELECT statement. If the query specifies multiple tables including the derived table, then the materialized result of the derived table with the dynamic load condition is treated as a parent table (but only if the derived table specifies a single first child table of the hybrid cache group).

See DerivedTable in the Oracle TimesTen In-Memory Database SQL Reference.

Example 4-1 Using a Derived Table

The following query uses a derived table within the FROM clause of the SELECT statement. The materialized result of the derived table is treated as the parent table orders when determining if the query qualifies for a dynamic load. The following query uses a derived table within the FROM clause of the SELECT statement. The materialized result of the derived table is treated as the parent table orders when determining if the query qualifies for a dynamic load.

SELECT * FROM 
 (SELECT customer_id FROM orders WHERE customer_id=? AND ROWNUM <= 5);

Including Multiple Tables

More than one table of the same hybrid cache group can be included in the same query.

  • One or more first level child tables of the same hybrid cache group can be included in a query (including the option of a derived table that includes a first level child table):
    • Specifies the same foreign key as the other first child tables or derived table.

    • Includes a join condition that equates its foreign key with the foreign key of other first child tables or derived table.

  • Any included grandchild table of the same hybrid cache group must:

    • Include a foreign key join condition with either the derived table or a first level child table of the same hybrid cache group.

    • Not be included in an outer table join with its parent table.

The following examples demonstrate the conditions that do and do not trigger a dynamic load for a hybrid cache group. All of these examples are based on the customer_orders hybrid cache group example defined in Creating a Hybrid Cache Group.

Example 4-2 Dynamic Load Condition Using Multiple First Level Child Tables

The following query triggers a dynamic load since two first level child tables (orders and locations) specify the same dynamic load condition.

SELECT * FROM orders, locations
 WHERE orders.customer_id=:id and locations.customer_id=:id;

And the following query triggers a dynamic load since the locations table equates its foreign key with the orders table foreign key.

SELECT * FROM orders, locations
 WHERE orders.customer_id=:id and locations.customer_id=:id;

Example 4-3 Dynamic Load Condition Using a First Level Child Table and a Derived Table

The following query triggers a dynamic load since two first level child tables (orders and locations) specify the same dynamic load condition. The locations table equates its foreign key with the dynamically loaded foreign key from the orders table.

The derived table is temporarily named cust as that name is provided directly after the derived table specification.

SELECT * FROM 
  (SELECT customer_id,order_id FROM orders 
          WHERE customer_id=:id and ROWNUM <= 5) cust, invoices, locations  
 WHERE 
    invoices.order_id = cust.order_id and locations.customer_id=cust.customer_id; 

Example 4-4 Dynamic Load Condition Using a First Level Child Table and Grandchild Table

The following query example triggers a dynamic load since the dynamic load condition is on a derived table that includes the orders table (a first level child table of the customer_orders hybrid cache group). It also includes the grandchild table invoices that is included in a foreign key join condition with the derived table cust.

Temporarily, the derived table name is orders and is treated as a parent table.

SELECT * FROM 
  (SELECT customer_id,order_id FROM orders 
          WHERE customer_id=? and ROWNUM <= 5) cust, invoices 
 WHERE invoices.order_id = cust.order_id;

Example 4-5 Dynamic Load Using Grandchild Table Joined with Derived Table

The following query triggers a dynamic load because the invoices table (as a grandchild table) is joined with the derived table cust through a foreign key join:

SELECT * FROM 
  (SELECT customer_id,order_id FROM orders 
          WHERE customer_id=? and ROWNUM <= 5) cust, invoices   
 WHERE invoices.order_id = cust.order_id; 

Example 4-6 No Dynamic Load Example with First Level Child Table

The following query does not trigger a dynamic load because the first level child locations table specifies a different dynamic load condition than the derived table (cust) load condition:

SELECT * FROM 
  (SELECT customer_id,order_id FROM orders 
          WHERE customer_id=:id and ROWNUM <= 5) cust, invoices, locations  
 WHERE invoices.order_id = cust.order_id and locations.customer_id=:id2; 

Example 4-7 No Dynamic Load Example Using Grandchild Table

The following query does not trigger a dynamic load because the invoices grandchild table is not joined through a foreign key join with its parent, the orders table.

SELECT * FROM 
  (SELECT customer_id,order_id FROM orders 
          WHERE customer_id=? and ROWNUM <= 5) cust, invoices   
 WHERE invoices.invoice_id=?; 

Example 4-8 No Dynamic Load Second Example Using Grandchild Table

The following query does not trigger a dynamic load because the invoices grandchild table is included in an outer table of a join with its parent, the orders table.

SELECT * FROM invoices LEFT JOIN
  (SELECT customer_id,order_id FROM orders 
          WHERE customer_id=? and ROWNUM <= 5) cust 
 ON invoices.order_id = cust.order_id;