0

我试图强制 oracle 数据库 11g 快速版在两个 JOIN 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';

但我得到的实际解释计划是这个:

解释我从 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

4

1 回答 1

0

使用USE_MERGE(s sp)而不是USE_MERGE(sp). 但我无法解释为什么会这样。提示很棘手,最好尽可能避免它们。

这是一个演示新提示工作的SQL Fiddle 。

于 2015-11-20T19:02:58.410 回答