小编典典

什么时候使用Oracle提示?

sql

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


阅读 255

收藏
2021-04-07

共1个答案

小编典典

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

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

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

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

最后,很难对此给出一般性建议。实际上,每个提示都需要在是否应在生产代码中使用的方面得到解决,但是如果您了解优化器并了解您实际考虑的提示以及是否有更好的替代方法(例如,更好的统计信息,不同方法)初始化参数或动态采样(本身就是一个提示)-您将能够进行自己的评估并在遇到挑战时进行辩护。

2021-04-07