|
SQL> explain plan for
2 select object_name, object_id from t5 ta
3 where exists
4 ( select /*+ NO_PUSH_PRED */ 1 from (select object_name ,max(object_id) object_id
5 from t5
where object_id < 10000
6 7 group by object_name
8 ) tb
9 where ta.object_name =tb.object_name
10 and ta.object_id = tb.object_id
11 );
Explained.
SQL> select * from table(dbms_xplan.display);
PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
Plan hash value: 2521264107
-----------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
-----------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 28 | 42M (1)|142:05:44 |
|* 1 | FILTER | | | | | |
| 2 | TABLE ACCESS FULL | T5 | 102K| 2808K| 423 (1)| 00:00:06 |
|* 3 | FILTER | | | | | |
| 4 | HASH GROUP BY | | 1 | 28 | 424 (1)| 00:00:06 |
|* 5 | TABLE ACCESS FULL| T5 | 1 | 28 | 423 (1)| 00:00:06 |
PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
-----------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
1 - filter( EXISTS (SELECT 0 FROM "T5" "T5" WHERE "OBJECT_NAME"=:B1
AND "OBJECT_ID"<10000 GROUP BY "OBJECT_NAME",:B2 HAVING
MAX("OBJECT_ID")=:B3))
3 - filter(MAX("OBJECT_ID")=:B1)
5 - filter("OBJECT_NAME"=:B1 AND "OBJECT_ID"<10000)
21 rows selected.
加了 hint 还是没效果 |
|