表与视图的性能

Bil*_*Man 12 sql oracle view

最近开始使用数据库,其中约定是为每个表创建一个视图.如果你假设表和视图之间存在一对一的映射,我想知道是否有人能告诉我这样做的性能影响.顺便说一句,这是在Oracle上.

OMG*_*ies 13

假设问题是关于非物化视图 - 实际上取决于视图所基于的查询,以及正在对其执行的操作.有时,谓词可以被优化器推送到视图查询中.如果没有,那么它就不如表格本身那么好.视图建立在表格之上 - 为什么你会期望性能会更好?

分层视图,您在另一个视图上构建一个视图,是一种不好的做法,因为在运行时之前您不会知道问题.使用分层视图也不太可能发生谓词推送.

视图也可以更新 - 如果有人对基础表具有INSERT/UPDATE/DELETE权限,则它们不是限制对资源的访问的可靠方法.

物化视图与表格一样好,但在它们支持的内容方面却是出了名的限制.

  • @BillMan:如果没有数据、查询和负载,很难量化多少。“解释计划”是确定您的设置情况的关键。 (2认同)

Ste*_*age 6

你没有解释你在视图中做了什么?表格的1:1听起来就像你使用的视图更像是同义词而不是视图.IOW,是views ="SELECT*FROM table",那么除了硬解析之外你不会看到任何性能损失.

如果你要加入其他表或在其中放置过滤子句来阻止谓词推送,那么你有时会看到一个重大的打击.


Gar*_*ers 6

我对视图的唯一痛苦是通过数据库链接进行分布式查询.本地优化器获取有关远程对象的一些详细信息,但视图不会告诉它任何索引,因此您可以获得一些怪异的计划.

我听说有些地方使用它作为标准,因为它们可以轻松地"重新排序"视图中的列.YMMV在我看来并不是一个很大的好处