我做的一个关于Oracle模式(Oracle版本10)一些重构,我看到了很多的使用提示看法*+ALL_ROWS*/
。 在别人的意见也有其他的一种暗示。 为什么要使用一个提示吗? 数据库不会使在查询的基础是最好的选择? 非常感谢!
Answer 1:
这是一个很好的问题,但没有单一的答案,因为有不同的类别提示不同的建议将适用于其中。 http://docs.oracle.com/cd/E11882_01/server.112/e16638/hintsref.htm#PFGRF501
ALL_ROWS是一种优化方法,它是完全有效的,将其指定为说清楚,你的目标是得到的结果尽早,而不是第一组的最后一排。 在许多情况下,优化器会推断,从查询无论如何,所以它可能是多余的,但你不会正确使用它来伤害任何东西。
然后有不同的类别,其中一些可能被定性为用于测试和勘探,如OPTIMIZER_FEATURES_ENABLE。 可以说,影响连接顺序,访问路径,并加入操作提示都是这种类型,因为他们有时会气馁了在应用中使用。 然而优化是不完美的,而且没有完善的信息,有时它将使基于需要加以纠正不完整信息的选择。
一些提示毫无疑问是有用的和适当 - APPEND可能是最好的例子,因为它是用于调用直接路径插入的标准方法。
到底真的很难就此给出广义建议。 每一个真正需要提示关于是否应该在生产代码中使用或不加以解决,但如果你了解了优化器,并了解你正在考虑的提示确实和是否有更好的选择 - 例如更好的统计数据,不同初始化参数,或动态采样(本身就是一种暗示) - 的,你就可以使自己的评估和捍卫它,如果挑战。
文章来源: When to use Oracle hints?