例如
SELECT /*+ INDEX(i dcf_vol_prospect_ids_idx)*/ /*+ LEADING(i vol) */ /*+ ALL_ROWS */ i.id_number,... FROM i_table i JOIN vol_table vol on vol.id_number = i.id_number JOIN to_a_bunch_of_other_tables... WHERE i.solicitor_id = '123' AND vol.solicitable_ind = 1;
请假设已经计算了所有表和索引统计信息. FYI,索引dcf_vol_prospect_ids_idx位于i.solicitor_id列上.
谢谢,
炖
解决方法
16.2.1 Specifying a Full Set of Hints
When using hints,in some cases,you
might need to specify a full set of
hints in order to ensure the optimal
execution plan. For example,if you
have a very complex query,which
consists of many table joins,and if
you specify only the INDEX hint for a
given table,then the optimizer needs
to determine the remaining access
paths to be used,as well as the
corresponding join methods. Therefore,
even though you gave the INDEX hint,
the optimizer might not necessarily
use that hint,because the optimizer
might have determined that the
requested index cannot be used due to
the join methods and access paths
selected by the optimizer.In Example 16-1,the LEADING hint
specifies the exact join order to be
used; the join methods to be used on
the different tables are also
specified.Example 16-1 Specifying a Full Set of
Hints
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,j.job_id ORDER BY total_sal;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。