oracle - 有没有办法让 Oracle 为每个查询调用重新计算查询计划?

标签 oracle sql-execution-plan

我有一个参数化查询。根据参数值,最佳查询计划会有很大差异。这就是问题所在:Oracle 将第一次查询调用的计划用于后续调用,从而导致性能不佳。我通过动态 SQL 处理它,但这种方式远非优雅。那么问题来了:有没有办法告诉Oracle必须重新计算查询计划?

最佳答案

如果查询计划确实在参数值上发生了显着变化,也许你不应该为这个参数使用绑定(bind)变量。

该参数可以取多少个不同的值?如果只有几个,您最终会得到几个查询计划(每个值一个),并且这些计划有望表现良好并且可以重复使用。

或者您可以在 SQL 语句中使用注释“/* THIS IS VALUE BRACKET ONE */”来分隔它们(或查询分析器提示,如果您觉得您知道哪些是合适的,例如/*+ CARDINALITY */可能适用这里)。

无论哪种方式,我认为您希望拥有单独的 SQL 语句,以便您可以在 Statspack 和 friend 中获得单独的报告,因为看起来您真的想要微调该查询。

关于oracle - 有没有办法让 Oracle 为每个查询调用重新计算查询计划?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/724516/

相关文章:

oracle - 如何查看Oracle表列字符集?

c# - 在 C# 中以通用方式从插入返回标识值

oracle - 错误oracle sql developer "SQL command not properly ended"

sql - 为什么这个简单的查询不使用 postgres 中的索引?

sql-server - 如何最好地执行这个执行计划

java - 插入日期在 SQL Developer 中有效,但在 Java 中无效

postgresql - 为什么 auto_explain 只在第一次调用 PL/pgSQL 函数时记录嵌套语句?

SQL Server 2008 执行计划问题

postgresql - 如何使用内联参数值在 PLPGSQL 中记录查询

c# - 在 C# 中,如何处理 Oracle Float 类型?接收错误 "Arithmetic operation resulted in an overflow"