我试图强制oracle数据库11g快速版在两个JOINs SELECT中使用两个特定方法创建JOIN,但是当我尝试使用USE_MERGE和它时,它不起作用USE_NL提示。我的SELECT看起来像这样:
SELECT /*+ ORDERED USE_MERGE(sp) USE_NL(p) FULL(s) FULL(sp) FULL(p) */ DISTINCT s.*
FROM s, sp, p
WHERE s.sn = sp.sn AND
p.pn = sp.pn AND
color = 'Rojo';
但我得到的实际解释计划就是这个:
explain plan that I'm getting from oracle
我真的非常绝望,我一直在寻找伟大的oracle文档,但我仍然无法实现它。这个例子看起来非常相似,但我不知道为什么不能使用我尝试过的组合。下一个代码是Oracle提供的示例:
SELECT /*+ LEADING(e2 e1) USE_NL(e1) INDEX(e1 emp_emp_id_pk)
USE_MERGE(j) FULL(j) */
e1.first_name, e1.last_name, j.job_id, sum(e2.salary) total_sal
FROM employees e1, employees e2, job_history j
WHERE e1.employee_id = e2.manager_id
AND e1.employee_id = j.employee_id
AND e1.hire_date = j.start_date
GROUP BY e1.first_name, e1.last_name, j.job_id
ORDER BY total_sal;
先谢谢你的帮助:D
答案 0 :(得分:0)
使用USE_MERGE(s sp)
代替USE_MERGE(sp)
。但我无法解释为什么有效。提示很棘手,最好尽量避免使用它们。
这是一个SQL Fiddle,展示了新的提示工作。