什么时候使用Oracle提示?

问题描述 投票:3回答:1

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

sql oracle10g query-optimization
1个回答
4
投票

这是一个很好的问题,但没有一个单一的答案,因为有不同类别的提示,会有不同的建议。http:/docs.oracle.comcdE11882_01server.112e16638hintsref.htm#PFGRF501

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

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

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

最后,真的很难就此给出笼统的建议。真的,每一个提示都需要考虑是否应该在生产代码中使用,但是如果你了解优化器,了解你正在考虑的提示的真正作用,以及是否有更好的替代方案--例如更好的统计,不同的初始参数,或者动态采样(本身就是一个提示)--你将能够做出自己的评估,并在受到质疑时为其辩护。

© www.soinside.com 2019 - 2024. All rights reserved.