Sql 简单查询优化?

Sql 简单查询优化?,sql,oracle,query-optimization,Sql,Oracle,Query Optimization,如何优化此查询? 而/*+索引(cmp\u JPB\u IDX)*/是什么意思?/*+索引(cmp\u JPB\u IDX)*/是Oracle向优化器发送提示的语法。 这意味着优化器在过滤c(即EMP)表时应尝试使用EMP\u JPB\u IDX 请注意,提示与它们的同名者所建议的一样——只是提示。它们不会强制优化器使用这个索引,依赖它们往往是一种不可靠的做法 您可以看到完整的细节。现在查询的问题是什么?它的运行时间是否比预期的长?检查查询上的解释计划?检查表格统计信息是否是最新的?还要检查是否

如何优化此查询? 而
/*+索引(cmp\u JPB\u IDX)*/
是什么意思?

/*+索引(cmp\u JPB\u IDX)*/
是Oracle向优化器发送提示的语法。 这意味着优化器在过滤
c
(即
EMP
)表时应尝试使用
EMP\u JPB\u IDX

请注意,提示与它们的同名者所建议的一样——只是提示。它们不会强制优化器使用这个索引,依赖它们往往是一种不可靠的做法


您可以看到完整的细节。

现在查询的问题是什么?它的运行时间是否比预期的长?检查查询上的解释计划?检查表格统计信息是否是最新的?还要检查是否创建了所有索引?Its/*+索引(c EMP_JPB_IDX)*/oracle提示查询以强制查询使用索引。在这里了解它,您还可以在查询上使用并行提示来并行执行查询(请阅读并行提示可能带来的负面影响,它可能会耗尽您的CPU使用量。因此,在使用并行提示之前,请始终在开发/测试环境中测试场景,然后再在生产中使用任何内容).

您不能。两个不同的表具有相同的表别名,因此查询编写不正确。另一个好主意是使用正确的ANSI
join
语法编写查询。首先使用什么RDBMS,其次使用ANSI join。第三次发布查询计划看在上帝的份上,请不要建议新手使用
>并行
提示。永远不要告诉他们它存在。你正在给一个还不熟悉猎枪的人一颗炸弹。至少要警告他们。提示是一个命令,而不仅仅是一个建议-Oracle只能在没有有效的计划遵守提示的情况下忽略提示。例如,如果没有这样的索引,或者如果索引访问uld可能会导致不同的输出(例如,如果Oracle需要检索不在索引中的
NULL
值)。
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';