简单查询优化?

时间:2013-12-27 20:13:17

标签: sql oracle query-optimization

SELECT /*+ index (c EMP_JPB_IDX) */ a.emp, a.mgr, c.job, b.dname
FROM   emp c,
       emp_mgr a,
       dept d,
       emp d
WHERE c.deptno = b.deptno AND
      a.empno = c.empno AND
      d.empno = a.mgrno AND
      d.job = 'ANALYST';

如何优化此查询? /*+ index (c EMP_JPB_IDX) */意味着什么?

2 个答案:

答案 0 :(得分:2)

/*+ index (c EMP_JPB_IDX) */是Oracle用于向优化程序发送提示的语法。 这意味着优化程序在过滤EMP_JPB_IDX(即c)表时应尝试使用emp

请注意,提示与其同名建议一样 - 只是提示。他们没有强制优化器使用这个索引,依赖它们往往是一种狡猾的做法。

您可以查看完整的细节here

答案 1 :(得分:0)

现在查询的问题是什么?运行时间超过预期吗?检查查询的解释计划?检查表统计信息是否是最新的?还检查是否已创建所有索引?其/ * +索引(c EMP_JPB_IDX)* / oracle提示查询以强制查询使用索引。在这里了解它http://docs.oracle.com/cd/B19306_01/server.102/b14211/hintsref.htm你也可以使用查询并行提示来并行执行查询(请阅读并行提示可能产生的负面影响,它可能会耗尽你的CPU使用率。所以在使用之前总是测试开发中的场景/在生产中使用任何东西之前测试环境。)