是否有理由不在Oracle中使用视图?

Lou*_*ong 8 sql oracle views oracle10g

我最近注意到没有人使用我公司的观点(而且它是一家大公司).

我想创建一些视图很大程度上是因为它们使我的查询更加简单,而且这些视图位于有些大的表上,不会经常更新(每天一次).

我的另一种方法是创建一个类型为记录的类型表,并在每次调用SP时填充它.这比使用视图更好吗?(我的猜测是否定的)

PS:数据库是oracle 10g和编辑: - 是的我已经问过,但没有人能给我一个理由. - 视图和将使用它们的查询对连接都很重要.

OMG*_*ies 6

当存在性能影响时,美学在SQL或编码中没有地位.

如果优化器确定可以发生谓词推送,则视图将与直接查询视图所代表的表一样好.正如Justin所提到的,因为视图是一个扩展到视图所代表的底层查询的宏 - 很可能是一个软解析(从缓存中重用查询),因为缓存检查需要精确匹配查询.

但请注意以下事项:

  • 分层视图(基于另一个视图)是一种不好的做法 - 在运行视图之前不会遇到错误
  • 将视图连接到其他表和/或视图是非常可疑的 - 如果基础查询代替视图引用,优化器可能也看不到它们.我有过这样的经历,因为加入的视图比查询所需的更多 - 有时候,所有使用的视图中的查询都会压缩成一个运行得更好的单个查询.

我建议您创建视图,并比较EXPLAIN计划,以确保您至少获得相同的性能.在评论方法之前,我需要查看用于填充TYPE的代码,但它听起来像一个派生表本质上......

您可能会从使用物化视图中受益,但它们在他们支持的内容方面受到了极大的限制.


Jus*_*ave 5

在这种情况下,创建一些视图肯定会有所帮助.

你有没有问过为什么没有人使用意见?这似乎很奇怪,肯定会表明你没有非常有效地重用SQL.没有视图,您倾向于在许多不同的SQL语句中使用相同的逻辑,而不是在单个视图中,这会使维护变得困难.