Oracle can put a predicate in a view if he believes that he will improve the plan.
If you want to avoid this, you can use one of the following actions:
- Add a tooltip
/*+ NO_MERGE */or /*+ NO_PUSH_PRED */to a view definition - Add a tooltip
/*+ NO_MERGE (view) */or /*+ NO_PUSH_PRED (view) */to a query that uses a view.
If you want to do this, use their couterparts /*+ PUSH_PRED */and/*+ MERGE */
, ( MATERIALIZED VIEW, ) (, ).
Oracle , SQL.
:
SELECT A, B, C
FROM aTbl, bTbl
LEFT JOIN cTbl ON
bTbl.cTblID = cTbl.objectkey
WHERE aTbl.objectkey = bTbl.parentkey
AND aTbl.flag1 = :NUMBER
SELECT *
FROM
(
SELECT A, B, C, flag1
FROM aTbl, bTbl
LEFT JOIN cTbl ON
bTbl.cTblID = cTbl.objectkey
WHERE aTbl.objectkey = bTbl.parentkey
)
WHERE flag1 = :NUMBER
SELECT A, B, C
FROM v_abc
WHERE flag1 = :NUMBER
: