带有编译器提示的 SQLDeveloper Tuning Advisor

SQLDeveloper Tuning Advisor with Compiler Hints

我正在尝试使用 Oracle SQL Developer 程序来分析一些查询,随着数据池变大,这些查询的完成时间呈指数增长。为此,我使用 SQL Tuning Advisor 来分析 query/table 结构,以潜在地创建更好的索引 and/or 更好的查询。

一切都很顺利,直到我分析了我的插入查询。它有一个 /*+ no_merge(<>) */ 提示,因为插入中使用的 sub-select 具有会导致编译器 "ORA-00979: not a GROUP BY expression" 错误的聚合。这已经是一个众所周知的错误,我知道这一点。

我的问题是 Tuning Advisor 显然忽略了提示,并且 returns 出现与您在上面看到的相同的错误。我仍然可以获得执行计划并且仍然可以 运行 查询,但我想使用顾问来获得更好的分析。

我的问题的解决方案可以是关于如何更改我的查询以不使用 no_merge 提示的建议,也可以是关于如何使用带提示的顾问的提示。

我已经看过这个 post ,它显示了一位用户对 Oracle 错误的评论,但这对我的事业没有帮助。

出于自行决定的目的,我不能只 post 此处的查询。查询说明如下:

Insert into tableX (
   cols...
)
select /*+ no_merge(<<alias>>) */
   <<alias>>.*
   otherCols...
from (
   select 
      cols...
      min(col1) as newName1,
      max(col1) as newName2
   from (
      select *
      from tableX
      where not exists (
         select 'x'
         from tableX
         where conditions...
      )
   ) group by
      cols...
) <<alias>>;

对于评论中的@BobC...

看到 1) 该错误似乎只影响 INSERT 语句,其中的 SELECT 应该 运行 对提示没问题,并且 2) 顾问不太可能提供任何有助于具体调整 INSERT 部分的帮助,您可以简单地 运行 顾问单独针对 SELECT 语句,有或没有提示。