何时使用Oracle提示?

时间:2013-01-25 16:00:53

标签: sql oracle10g query-optimization

我正在对Oracle Schema(oracle版本10)进行一些重构,我看到许多使用提示*+ALL_ROWS*/的视图。在其他观点中,还有其他类型的提示。 为什么我应该使用提示? DB在查询的基础上没有做出最佳选择?非常感谢!

1 个答案:

答案 0 :(得分:3)

这是一个很好的问题,但没有单一的答案,因为有不同类别的提示,适用不同的建议。 http://docs.oracle.com/cd/E11882_01/server.112/e16638/hintsref.htm#PFGRF501

ALL_ROWS是一种优化方法,指定它是完全有效的,以便明确您的目标是尽早获得结果集的最后一行,而不是第一行。在许多情况下,优化器无论如何都会从查询中推断出来,因此它可能是多余的,但是你不会通过正确使用它来伤害任何东西。

然后有不同的类别,其中一些可能被定性为用于测试和探索,例如optimizer_features_enable。可以说,影响连接顺序,访问路径和连接操作的提示属于这种类型,因为它们有时不鼓励在应用程序中使用。然而,优化器并不完美,并且没有完美的信息,有时它会根据需要纠正的不完整信息做出选择。

一些提示毫无疑问是有用和合适的 - APPEND可能是最好的例子,因为它是调用直接路径插入的标准方法。

最后,就此提出一般性建议真的很困难。实际上每个提示都需要解决是否应该在生产代码中使用,但是如果您了解优化器并了解您正在考虑的提示是什么以及是否有更好的替代方案 - 例如更好的统计数据,不同初始参数,或动态抽样(本身就是一个提示) - 如果受到挑战,你将能够进行自己的评估并为其辩护。