我有一个参数化查询。根据参数值,最佳查询计划会有很大差异。这就是问题所在:Oracle 将第一次查询调用的计划用于后续调用,从而导致性能不佳。我通过动态 SQL 处理它,但这种方式远非优雅。那么问题来了:有没有办法告诉Oracle必须重新计算查询计划?
最佳答案
如果查询计划确实在参数值上发生了显着变化,也许你不应该为这个参数使用绑定(bind)变量。
该参数可以取多少个不同的值?如果只有几个,您最终会得到几个查询计划(每个值一个),并且这些计划有望表现良好并且可以重复使用。
或者您可以在 SQL 语句中使用注释“/* THIS IS VALUE BRACKET ONE */”来分隔它们(或查询分析器提示,如果您觉得您知道哪些是合适的,例如/*+ CARDINALITY */可能适用这里)。
无论哪种方式,我认为您希望拥有单独的 SQL 语句,以便您可以在 Statspack 和 friend 中获得单独的报告,因为看起来您真的想要微调该查询。
关于oracle - 有没有办法让 Oracle 为每个查询调用重新计算查询计划?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/724516/