当我开始加速Oracle(在过去的几十年里一直是DB2的人)时,我看到很多现有的代码在其查询中使用了优化器提示.
从我在各种以Oracle为中心的网站上看到的内容,一些Oracle"专家"建议AGAINST在生产代码中加入优化器提示,因为:
一位"专家"说:
隐藏提示的原因是,通过在SQL中嵌入提示,您将覆盖优化器并说您知道的比实时更多 - 不仅仅是现在,而且每次将来您的SQL都将运行,而不管您的数据库可能发生的任何其他更改.这可能导致您的SQL现在可能会以次优的方式运行,而且几乎肯定会在未来运行.
(参见http://allthingsoracle.com/a-beginners-guide-to-optimizer-hints/)
因此,如果通常已知优化器提示是"不明智的",为什么它们经常被使用(...至少在我看过的代码中)?