嵌套数据库视图可以吗?

Gal*_*mon 9 sql oracle plsql views

在oracle的世界里,我的印象是基于其他观点的观点被认为是不好的做法.当我试图解决性能问题和嵌套看起来过度并隐藏在底层视图中不必要的复杂性时,我自己就抱怨过这个问题.现在我发现自己处于这样的状态:它可能不那么明确:

我的用户非常特别需要从一个视图中获取会计编号,以匹配对其进行进一步处理的另一个视图编号.如果他们改变任何一个,他们希望对方立即反映,没有任何人必须在几年内考虑这个要求,并报告显示不匹配的数字,而他们弄清楚.

在这种情况下嵌套视图是否可以?

如果内部视图包含一个包含相关价格的进一步重要视图(即您在确定价格时"总是"应该使用此视图),它会改变吗?

Con*_*lls 6

嵌套视图的主要问题是查询优化器更容易混淆并产生次优计划.除此之外,在视图上使用视图没有特定的开销,除非它们执行优化器无法将谓词推入的内容.

这意味着最好的选择是尝试嵌套视图.看看你是否从报告中获得了合理的查询计划.如果确实会导致问题,那么您可能需要重新考虑您的策略.

  • +1,回答此类问题的最佳方法是尝试并衡量效果影响.解释计划是你的朋友. (3认同)

Dav*_*vid 5

我将从最佳实践的角度回答:

关于使用Views on Views,我只会停顿几次.

  1. 嵌套似乎已经失控......比如超过3级.我嵌套的原因是为了使代码更容易维护.一旦我开始达到这一点,它开始感觉有点太复杂,无法理解.

  2. 嵌套使用分析函数的视图.出于某种原因,我个人对使用分析功能嵌套视图没有很好的经验.

  3. 嵌套视图,按性质进行全面扫描.虽然我认为查询优化器可能足够智能来处理这个问题,但当我查看视图的逻辑时,我看起来就错了.

  4. 性能是一个很大的问题.这并不是说优化器可能会出错,但这就是说在我发布它之前,我将测试它,看看我是否无法想出更快的方法.

除此之外,我已经非常成功地使用了对视图的观点.