会更快
select * from users where id = 1
or
delete from users where id = 1
or
select count(*) from users
我会为它创建一个SP吗?
答案 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)
我倾向于更倾向于这个但是我再次看到你可能想要这样做的场景。
例如,您可能希望通过利用存储过程来实现一层安全性。
在考虑您提供的示例查询时,使用存储过程没有改进的计划重用。