为像用户选择*这样的简单查询执行SP是否有意义

时间:2010-06-10 13:05:32

标签: sql sql-server

如果不是

会更快

select * from users where id = 1 
or
delete from users where id = 1
or 
select count(*) from users

我会为它创建一个SP吗?

4 个答案:

答案 0 :(得分:3)

表现方面,不,它没有任何区别。

安全方面,确实有所作为。使用sproc意味着您只需要在sproc上授予执行权限,而非sproc方法则需要直接在基础表上授予权限。

网络流量 - 潜在的,轻微/可忽略的差异。更适用于较大的语句,您可以通过线路发送整个SQL语句或仅发送sproc调用。总体上可以忽略不计。

维护 - sproc方法允许您(例如)调整查询而无需重新部署整个应用程序。

我想要的是参数化查询而不是在sql语句中使用“硬编码”值来支持执行计划重用。

答案 1 :(得分:2)

如果您担心效率,请不要这样做:

Select * From Users

取而代之的是:

Select column1, column2 From Users

否则,SQL Server需要对Users表中的所有列进行查找。

就个人而言,我不会在存储过程中放置​​这样的东西,但是如果他们通过存储过程进行所有数据访问,有些人会这样做。

答案 2 :(得分:1)

如果您使用SP进行所有数据访问,那么是。否则我不会用它。具有不一致的行为绝不是一个好主意,特别是在源代码中。

我猜你是在问这个问题,因为你认为SP比程序发送的内联查询要快,但是从sql server 2005开始,由于所有执行计划都被缓存,所以这不再是真的。

答案 3 :(得分:1)

我倾向于更倾向于这个但是我再次看到你可能想要这样做的场景。

例如,您可能希望通过利用存储过程来实现一层安全性。

在考虑您提供的示例查询时,使用存储过程没有改进的计划重用。