oracle用不同的方法暗示了几个连接

时间:2015-11-20 17:32:18

标签: sql oracle oracle11g optimizer-hints

我试图强制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

1 个答案:

答案 0 :(得分:0)

使用USE_MERGE(s sp)代替USE_MERGE(sp)。但我无法解释为什么有效。提示很棘手,最好尽量避免使用它们。

这是一个SQL Fiddle,展示了新的提示工作。