设想:
我有3个表需要连接在一起,where子句用于限制结果集,并且从每个表中只选择了几列。简单的。但是,执行此操作的查询不是很漂亮,并且在数据库和应用程序之间使用ORM时,就像试图将方形钉放入圆孔中一样。
解决这个问题的方法是创建一个包含查询的视图,现在我的应用程序模型直接映射到数据库中的一个视图。不再疯狂地映射ORM层。
问题:假设这里没有其他因素起作用, 如果直接执行SQL语句 , 针对视图的查询是否会产生我不会受到的其他性能损失? -这不是索引视图,假定具有相同的where子句,请保持简单。
导致我相信一种观点会遭受“正在构建”的额外开销。我的理解是,在其他所有条件相同的情况下,两者应具有相同的性能。
请说清楚。谢谢!
从MSDN: 查看分辨率
当SQL语句引用非索引视图时,解析器和查询优化器将分析SQL语句和视图的源,然后将它们解析为一个执行计划。对于SQL语句,没有一个计划,而对于视图,没有一个单独的计划。
不应有任何不同的表现。视图可帮助您进行组织,而不是任何性能增强。除非您使用索引视图。
仅存储未索引视图的定义,而不存储视图的行。查询优化器将视图定义中的逻辑并入为其针对引用非索引视图的SQL语句构建的执行计划中。