带编译器提示的SQLDeveloper调优顾问

时间:2017-03-06 19:40:35

标签: sql oracle oracle12c

我正在尝试使用Oracle SQL Developer程序来分析一些查询,这些查询在数据池变大时需要花费指数级的时间来完成。为了做到这一点,我正在使用SQL Tuning Advisor来分析查询/表结构,以潜在地创建更好的索引和/或更好的查询。

在我分析插入查询之前,一切都很顺利。它中有一个/ * + no_merge(<>)* /提示,因为插入中使用的子选择具有聚合,这将导致编译器“ORA-00979:不是GROUP BY表达式”错误。这已经是一个众所周知的错误,我知道这一点。

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

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

我已经看过这篇帖子here,其中显示了一位评论Oracle漏洞的用户,但这对我的原因没有帮助。

出于自行决定的目的,我不能在这里发布查询。查询的描述如下:

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的评论...... Version Number of the Oracle DB

1 个答案:

答案 0 :(得分:2)

看到1)该错误似乎只影响INSERT语句,其中的SELECT应该与提示运行良好,2)顾问不太可能提供任何帮助调整{{1} 1}}具体来说,您可以单独针对INSERT语句运行顾问,无论是否有提示。

相关问题