VIEW PUSHED PREDICATE

Description

Push a predicate into a view

Requires the session parameter "_push_join_predicate" to be set to TRUE

Versions

This operation was introduced in Oracle 8.1.5

This operation is implemented in the following versions

8.1.5
8.1.6
8.1.7
9.0.1
9.2.0
10.1.0
10.2.0

Example

This example was developed using Oracle 9.2.0.1 on Windows 2000

This example requires the following object definitions

    CREATE TABLE t1 (c1 NUMBER,c2 NUMBER);

    CREATE TABLE t2 (c1 NUMBER);

    CREATE TABLE t3 (c1 NUMBER);

    CREATE INDEX i1 ON t2 (c1);

    CREATE INDEX i2 ON t3 (c1);

The objects do not need to be analysed

The session parameter "_push_join_predicate" must be set to TRUEA

    ALTER SESSION SET "_push_join_predicate" = TRUE;

The statement

    SELECT /*+ PUSH_PRED (v1) */ t1.c1,v1.c1
    FROM t1,
    (
      SELECT t2.c1
      FROM t2,t3
      WHERE t2.c1 = t3.c1
    ) v1
    WHERE t1.c1 = v1.c1(+)
    AND t1.c2 = 0;

generates the following execution plan

0     SELECT STATEMENT Optimizer=CHOOSE
1   0   NESTED LOOPS (OUTER)
2   1     TABLE ACCESS (FULL) OF 'T1'
3   1     VIEW PUSHED PREDICATE
4   3       NESTED LOOPS
5   4         INDEX (RANGE SCAN) OF 'I1' (NON-UNIQUE)
6   4         INDEX (RANGE SCAN) OF 'I2' (NON-UNIQUE)