SQL Server性能:什么是更快,存储过程或视图?

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子句的连接?

  • 据推测,他正在谈论返回零行,一行或多行结果集的SP. (4认同)

Dav*_*vid 8

这不是一个真正的问题,因为答案在所有情况下都适用.但是,作为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性能的所有方法,那么上面的第二个链接是一个很好的起点.


RRU*_*RUZ 5

我更喜欢存储过程,因为允许更好地控制数据,如果你想构建一个好的,安全的模块化系统然后使用存储过程,它可以运行多个sql命令,具有控制流语句并接受参数.您可以在视图中执行的所有操作都可以在存储过程中执行.但是在存储过程中,您可以更灵活地进行操作.


Tej*_*gde 5

简而言之,根据我在一些复杂查询中的经验,存储过程比函数提供了更好的性能。

但是您不能在选择或联接查询中使用存储过程的结果。

如果不想在另一个查询中使用结果集,最好使用 SP。

本论坛和其他地方的人都提到了其余的细节和差异。