【问题标题】:Which method is best method for speed? in SQL Server, stored procedure哪种方法是提高速度的最佳方法?在 SQL Server 中,存储过程
【发布时间】:2010-03-19 14:57:24
【问题描述】:

我有选择、插入、更新和删除查询。

如果我必须在同一个存储过程中编写所有查询以提高性能,还是应该将所有查询编写在单独的存储过程中?

【问题讨论】:

  • 如果所有操作都相关,最好将它们放在同一个事务中。但据我所知,没有性能优势。
  • @OMG - 到数据库的循环次数更少?只有我能想到的。
  • @Kragen:好点——我在考虑查询性能本身。这就是我在喝咖啡之前发表评论的结果(tm)

标签: sql-server stored-procedures


【解决方案1】:

为了便于维护,我会进行单独的程序。

如果相同的代码在一个或多个 proc 中,速度将不是问题 - 只要代码相同,它在一个或多个 proc 中的行为方式相同。

获得良好速度的最佳方法是编写高效的查询。运行它并审查执行计划;然后在需要的地方调整查询。

你会在这个网站上找到很多关于查询调优和索引调优的好信息(随便搜索一下)。

【讨论】:

    【解决方案2】:

    如果是这样,并且所有参数都是可管理的:

    BEGIN TRANSACTION
        INSERT
        ....
        UPDATE
        ...
        DELETE
    COMMIT
    

    是的,多合一将消除多次调用的少量开销,并将逻辑作为一个单元保持在一起。

    如果是这样的话:

    @ParamType char(1) --given parameter "I"nsert, "U"pdate, "D"elete
    
    IF @ParamType='I'
       INSERT
    ELSE IF @ParamType='U'
       UPDATE
    ELSE
        DELETE
    

    将它们拆分为单独的程序,将它们组合在一起毫无意义。

    【讨论】:

    • @AjmeraInfo,我的回答试图解决何时合并它们以及何时不合并。有时将它们结合起来很好,有时则不然。我说如果它们与交易相关,则将它们组合起来,如果它们不相关,则不要组合它们。你的问题没有给出任何关于它们是否相关的提示,而且非常模糊。如果您编辑您的问题并提供更多详细信息,我很乐意根据您提供的任何新信息修改我的答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-21
    • 2010-10-05
    • 1970-01-01
    • 2016-11-08
    相关资源
    最近更新 更多