仅在满足条件时使用提示

Posted

技术标签:

【中文标题】仅在满足条件时使用提示【英文标题】:Use hint only if condition is met 【发布时间】:2014-10-30 11:42:02 【问题描述】:

我的 PL/SQL 函数向表中插入:

procedure MY_PROC(n in number default null) is
begin
    insert into MY_TABLE T
    select ...
    from ...;
end;

我的问题是:如果n 为空,则查询非常慢,我发现使用materialize 提示(是的,我知道它没有记录)可以解决问题。但是,如果n 不为空,那么很快的查询现在因为这个提示而变慢了!

那么有没有办法仅在满足条件时才使用提示?我坚持使用动态 SQL (execute immediate),但我想避免这种情况。

谢谢!

【问题讨论】:

您怎么知道materialize 提示解决了您的问题?您是否比较了执行计划以了解原因? 嗯,执行时间是一个很好的参数,不是吗? 10 秒对几分钟... 您知道计划将如何随着现实和不断变化的数据量和输入参数进行扩展吗?如果您不知道计划是什么,那么您就无法知道它在不同条件下的表现。仅仅因为它似乎在一个实例中使其更快而添加提示并不是调整查询的可靠方法。 【参考方案1】:

你必须写两个插入语句,一个有提示,一个没有提示,并用

分隔它们
if n is null then
   ... statement with hint
else
   ... statement without hint
end if;

【讨论】:

以上是关于仅在满足条件时使用提示的主要内容,如果未能解决你的问题,请参考以下文章

仅在满足条件时才添加到字典

仅在满足条件时如何启动调试器

仅在满足某些条件时才调用 Safari Content Blocker 扩展?

仅在满足条件时如何应用edgeIgnoringSafeArea?

仅在满足条件时链接多个 CompletionStage

Python分组;仅在满足条件时保留