【问题标题】:does it makes sense to do SP for simple queries like select * from users对像 select * from users 这样的简单查询进行 SP 是否有意义
【发布时间】:2010-06-10 13:05:31
【问题描述】:

会不会更快如果不是这样做

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

我会为它创建一个 SP 吗?

【问题讨论】:

标签: sql sql-server


【解决方案1】:

性能方面,不,它没有任何区别。

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

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

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

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

【讨论】:

    【解决方案2】:

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

    Select * From Users
    

    改为:

    Select column1, column2 From Users
    

    否则,SQL Server 需要查找用户表中的所有列。

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        【解决方案4】:

        我更倾向于反对这个,但我可以再次看到您可能想要这样做的场景。

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

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

        【讨论】:

          猜你喜欢
          • 2019-11-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-08-24
          • 1970-01-01
          • 1970-01-01
          • 2019-07-22
          相关资源
          最近更新 更多