15. /*+USE_CONCAT*/
对查询中的WHERE后面的OR条件进行转换为UNION ALL的组合查询. (懵懂啊,先存着)
例如:
select /*+use_concat */ * from emp where deptno=10 OR empno=7788;
Execution Plan
----------------------------------------------------------
0 SELECT STATEMENT Optimizer=CHOOSE (Cost=2 Card=2 Bytes=174)
1 0 TABLE ACCESS (FULL) OF 'EMP' (Cost=2 Card=2 Bytes=174)
16. /*+NO_EXPAND*/
对于WHERE后面的OR 或者IN-LIST的查询语句,
NO_EXPAND将阻止其基于优化器对其进行扩展.
SELECT /*+NO_EXPAND*/ * from EMP WHERE DEPTNO=10 AND job='MANAGER';
Execution Plan
----------------------------------------------------------
0 SELECT STATEMENT Optimizer=CHOOSE (Cost=2 Card=1 Bytes=87)
1 0 TABLE ACCESS (FULL) OF 'EMP' (Cost=2 Card=1 Bytes=87)
17. /*+NOWRITE*/
禁止对查询块的查询重写操作.
18. /*+REWRITE*/
可以将视图作为参数.
19. /*+MERGE(TABLE)*/
能够对视图的各个查询进行相应的合并.
20. /*+NO_MERGE(TABLE)*/
对于有可合并的视图不再合并.
21. /*+ORDERED*/
根据表出现在from中的顺序,ORDERED使ORACLE依此顺序对其连接.
SELECT /*+ORDERED*/ D.DNAME, E.ENAME,E.SAL from EMP E,DEPT D WHERE E.DEPTNO=D.DEPTNO;
Execution Plan
----------------------------------------------------------
0 SELECT STATEMENT Optimizer=CHOOSE (Cost=5 Card=82 Bytes=4510)
1 0 HASH JOIN (Cost=5 Card=82 Bytes=4510)
2 1 TABLE ACCESS (FULL) OF 'EMP' (Cost=2 Card=82 Bytes=2706)
3 1 TABLE ACCESS (FULL) OF 'DEPT' (Cost=2 Card=82 Bytes=1804)
兑换下EMP和DEPT的顺序,得到
SELECT /*+ORDERED*/ D.DNAME, E.ENAME,E.SAL from DEPT D, EMP E WHERE E.DEPTNO=D.DEPTNO;
Execution Plan
--------------------