查询视图比直接执行SQL要慢吗?

时间:2011-01-07 21:53:18

标签: sql

情景:

我有3个表需要连接在一起,一个where子句来限制结果集,并且每个表中只有几列被选中。简单。但是,执行此操作的查询并不是很漂亮,并且在数据库和应用程序之间使用ORM时,它就像尝试将方形挂钩放入圆孔中一样。

我解决这个问题的方法是创建一个包含查询的视图,现在我的应用程序模型直接映射到数据库中的视图;没有更多的疯狂映射ORM层。

问题: 假设没有其他因素在这里发挥作用,对视图的查询是否会产生任何额外的性能损失,如果我直接执行SQL语句,我不会遇到这种情况? - 这不是索引视图,假设相同的where子句,请保持简单。

我被引导相信一个观点遭受“正在建立”的额外开销。我的理解是,在其他所有情况相同的情况下,两者应具有相同的性能。

请澄清。谢谢!

2 个答案:

答案 0 :(得分:4)

来自MSDN: View resolution

  

当SQL语句引用非索引视图时,解析器和查询优化器会分析SQL语句和视图的来源,然后将它们解析为单个执行计划。 SQL语句没有一个计划,也没有单独的视图计划。

不应该有任何不同的表现。视图可以帮助您组织,而不是任何性能增强。除非您使用索引视图。

  

仅存储非索引视图的定义,而不存储视图的行。查询优化器将视图定义中的逻辑合并到它为引用非索引视图的SQL语句构建的执行计划中。

答案 1 :(得分:3)

在Oracle中,性能是一样的。视图实际上是一个命名的sql语句。但是发烧友。

当您开始嵌套视图,并将视图与其他表或视图连接时,事情变得非常复杂。如果Oracle无法将过滤器向下推到表的视图中,那么它通常必须实现(构建临时表)部分查询,这就是当你遇到糟糕的性能时。