表与视图的性能

时间:2011-06-29 17:05:54

标签: sql oracle view

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

3 个答案:

答案 0 :(得分:13)

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

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

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

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

答案 1 :(得分:6)

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

如果您正在加入其他表或在其中放置阻止谓词推送的过滤子句,那么您有时会看到重大命中。

答案 2 :(得分:6)

我对视图的唯一痛苦是通过数据库链接进行分布式查询。本地优化器获取有关远程对象的一些细节,但是视图没有告诉它任何索引,所以你可以得到一些怪异的计划。

我听说有些地方使用它作为标准,因为它们可以轻松地“重新排序”视图中的列。我认为YMMV

并不是一个很大的好处