7wp*_*7wp 38 sql sql-server stored-procedures views
SQL Server 2005/2008,存储过程或视图的速度更快?
编辑:
正如你们许多人指出的那样,我太模糊了.让我试着更具体一点.
我想知道View中特定查询的性能差异,而不是存储过程中的完全相同的查询.(我仍然感谢所有指出他们不同能力的答案)
mjv*_*mjv 70
存储过程(SP)和SQL视图是本文中多次说明的不同"野兽".
如果我们排除与查询计划的缓存相关联的一些[通常是次要的,除边缘情况之外]性能考虑因素,与绑定到存储过程相关联的时间等,这两种方法在性能方面完全等效.然而...
视图仅限于可以在单个SELECT语句中表达的任何内容(好吧,可能还有CTE和其他一些技巧),但一般来说,视图与声明形式的查询相关联.另一个存储过程可以使用各种过程类型构造(以及声明式构造),因此,使用SP,可以手工制作解决给定查询的方法,这可能比SQL-Server 更有效.查询优化器可能已经完成(基于单个声明性查询).在这些情况下,SP可能会快得多(但要注意......优化器非常智能,并且使SP比同等视图慢得多).
除了这些性能考虑因素之外,SP还具有更多功能,并且允许比视图更广泛的查询和操作.
p.c*_*ell 13
不幸的是,他们不是同一种野兽.
存储过程是一组T-SQL语句,CAN返回数据.它可以执行各种逻辑,并不一定返回结果集中的数据.
视图是数据的表示.它主要用作具有底层连接的一个或多个表的抽象.它始终是零行,一行或多行的结果集.
我怀疑你的问题更像是:
哪个更快:
SELECT
从视图或SELECT
存储过程中的等效语句开始,给定相同的基表执行具有相同where子句的连接?
这不是一个真正的问题,因为答案在所有情况下都适用.但是,作为SQL Server特定实现的一般答案......
通常,存储过程很可能比直接SQL语句更快,因为服务器在第一次保存和执行存储过程时会执行各种优化.
视图本质上是一个保存的SQL语句.
因此,我会说,一般来说,存储过程可能比视图更快,因为每个SQL语句都是相同的,如果SQL语句可以从优化中受益.否则,一般来说,它们的性能相似.
参考这些链接文档支持我的答案.
http://www.sql-server-performance.com/tips/stored_procedures_p1.aspx
http://msdn.microsoft.com/en-us/library/ms998577.aspx
此外,如果您正在寻找优化SQL Server性能的所有方法,那么上面的第二个链接是一个很好的起点.
我更喜欢存储过程,因为允许更好地控制数据,如果你想构建一个好的,安全的模块化系统然后使用存储过程,它可以运行多个sql命令,具有控制流语句并接受参数.您可以在视图中执行的所有操作都可以在存储过程中执行.但是在存储过程中,您可以更灵活地进行操作.
简而言之,根据我在一些复杂查询中的经验,存储过程比函数提供了更好的性能。
但是您不能在选择或联接查询中使用存储过程的结果。
如果不想在另一个查询中使用结果集,最好使用 SP。
本论坛和其他地方的人都提到了其余的细节和差异。