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

PAR*_*PAR 9 sql

场景:

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

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

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

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

请澄清.谢谢!

sti*_*net 5

来自 MSDN: 查看分辨率

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

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

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


Ron*_*nis 5

在Oracle中,性能是一样的。视图实际上是一个命名的 sql 语句。但更花哨。

当您开始嵌套视图并将视图与其他表或视图连接时,事情很快就会变得复杂。如果 Oracle 无法将过滤器从视图下推到表,它通常必须具体化部分查询(构建临时表),这就是性能不佳的时候。