3

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

4

1 回答 1

4

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

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

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

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

最后,很难就此给出笼统的建议。确实,每个提示都需要解决是否应该在生产代码中使用,但是如果您了解优化器并了解您正在考虑的提示的真正作用以及是否有更好的选择 - 例如更好的统计数据,不同的初始化参数或动态采样(本身就是一个提示)——如果遇到挑战,您将能够做出自己的评估并捍卫它。

于 2013-01-25T16:13:52.300 回答