【发布时间】:2015-03-05 08:45:40
【问题描述】:
随着我对 Oracle 的了解(过去几十年一直是 DB2 专家),我看到大量现有代码在其查询中使用优化器提示。
根据我在各种以 Oracle 为重点的网站上阅读的内容,一些 Oracle“专家”建议不要将优化器提示放在生产代码中,因为:
- 对于每个 Oracle 补丁或升级,提示可能都是错误的。
- 对于每个 DDL,提示可能都是错误的。
一位“专家”说:
对提示保持警惕的原因是,通过在 SQL 中嵌入提示,您会覆盖优化器并说您知道的比它知道的更多——不仅是现在,而且将来每次运行您的 SQL ,而不管您的数据库可能发生的任何其他更改。这样做的可能后果是,您的 SQL 现在可能会以次优方式运行,并且几乎可以肯定在未来。
(见http://allthingsoracle.com/a-beginners-guide-to-optimizer-hints/)
那么,如果优化器提示通常被认为是“不明智的”,那么为什么它们会如此频繁地使用(……至少在我见过的代码中)?
【问题讨论】:
-
这实际上取决于提示的类型、Oracle 版本和用例。
-
正如@ibre5041 所说,这取决于。您经常看到哪些提示?像 FIRST_ROWS 或 ALL_ROWS 这样的东西一般都可以,但是像 INDEX(x y) 这样的东西就不太好。