SQL Server 性能 结果集 vs 输出参数 vs 返回值

2023-11-22

我正在权衡使用三种不同方法之一将单个标量值从存储过程返回到我的 C# 例程的潜在性能影响。谁能告诉我其中哪个“更快”,最重要的是,为什么?

方法一:

CREATE PROCEDURE GetClientId 
    @DealerCode varchar(10)
AS
BEGIN
    SET NOCOUNT ON
    SELECT ClientId
        FROM Client
        WHERE ClientCode = @DealerCode
END
-- this returns null if nothing is found, 
-- otherwise it returns ClientId in a ResultSet

方法二:

CREATE PROCEDURE GetClientId 
    @DealerCode varchar(10),
    @ClientValue int out
AS
BEGIN
    SET NOCOUNT ON
    set @ClientValue = -1
    set @ClientValue = (SELECT ClientId
        FROM Client
        WHERE ClientCode = @DealerCode)
END
-- this returns -1 for ClientValue if nothing is found,
-- otherwise it returns ClientId
-- the value for ClientValue is a scalar value and not a ResultSet

方法三:

CREATE PROCEDURE GetClientId 
    @DealerCode varchar(10)
AS
BEGIN
    SET NOCOUNT ON
    declare @ClientValue int
    set @ClientValue = 
        (SELECT ClientId FROM Client WHERE ClientCode = @DealerCode)
    if @ClientValue is null or @ClientValue = 0
        return -1
    else
        return @ClientValue
END
-- this uses the return value of the stored procedure;
-- -1 indicates nothing found
-- any positive, non-zero value is the actual ClientId that was located

返回标量值比结果集更有效,原因是结果集附带了更多的辅助方法,这使得它变得很重,从而增加了对象从 sql 到 C# 代码/例程的传输延迟。

在方法 3 中:您使用了一个变量来返回值,这比发送 out 参数更好,因为在这里您至少在一条路径中减少了对象的遍历(即,在调用存储过程时)。

结果集比输出参数更灵活,因为它可以返回多行(显然),因此如果您需要结果集,那么它是唯一的选择。

根据性能对查询进行排序,如方法 3、方法 2 和方法 1。

希望这有助于理解这个概念。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SQL Server 性能 结果集 vs 输出参数 vs 返回值 的相关文章

随机推荐

  • 两次调用析构函数

    对于以下代码 include
  • 如何裁剪 Keras 中图层返回的值?

    如何剪辑返回的值Lambda layer 我尝试使用这个 from keras backend tensorflow backend import clip from keras layers core import Lambda mode
  • @font-face 被 IE7 忽略

    我创建了一个 font face css规则和所有使用的字体格式松鼠字体在我迄今为止测试过的所有浏览器上都可以正常工作 但在 IE7 上不行 字体似乎根本没有加载 您可以在以下位置实时查看该网站 http grupogamma social
  • 将程序集安装到 GAC 中

    我尝试使用以下命令在 GAC 中安装程序集new System EnterpriseServices Internal Publish GACInstall Foo dll 但我找不到安装在 c windows assembly gac m
  • 使用我的 Android 应用程序将文本标签发送到 Instagram

    我的应用程序拍摄照片并将其发送到 Instagram Facebook 和 Twitter 但我需要在 Instagram 上分享带有图片的文本 myappname 这是我用来发送照片的代码 Intent shareIntent new I
  • 渲染 @object 和 locals 与 render :partial

    我想传递一个局部变量 其中包含特定页面上的原点 该变量仅包含带有值的符号 当我使用这段代码时 它工作得很好 可以在部分中访问 origin 变量 render partial gt products collection gt produc
  • 如何在 Node 4.x 中使用 Promise?

    既然 ES6 在 Node 4 x 中正式成为标准 那么如何使用 Promises 呢 做模块 例如本机fs模块 自动与 Promise 一起工作 或者必须专门编写模块才能与 Promise 一起使用 你怎么知道 Promise 可以用于什
  • 三种颜色的三角形

    我正在尝试为这个问题编写代码 来源 https www codewars com kata insane coloured triangles train c 彩色三角形是由一行颜色创建的 每种颜色都是 红色 绿色或蓝色 连续行 每行少一种
  • C++11:std::locale::empty() 是一件事吗?

    尝试编译一些代码来自 StackOverflow 基本上是这些行 std wifstream wif filename wif imbue std locale std locale empty new std codecvt utf8
  • 为什么我不能在单个服务器请求中插入带有外键的记录?

    我正在尝试使用外键进行简单的插入 但似乎我需要使用db SaveChanges 对于每条记录插入 我怎样才能只使用一个db SaveChanges 在这个程序的最后 public static void Test using var ent
  • 多次导航至同一实体

    当有 2 个导航时 我遇到两个实体之间的连接问题 具体来说 我有以下课程 public class TableA public TableA ListBs new List
  • Zend Framework 2:在视图中获取匹配的路由

    我目前正在通过开发一个大致基于骨架应用程序的小型 MVC 应用程序来学习 ZF2 现在我正在尝试根据匹配的路由隐藏一些固定的 HTML 元素 仅作为示例 我不希望在登录阶段显示主菜单 我可以通过将切换参数作为控制器操作的返回值传递来轻松做到
  • 如何在polymer中设置动态Meta标签和Open Graph标签?

    我有一个聚合物节点站点 我一直在研究它 但不知道如何包含动态元标记和开放图标记 Jquery 无法工作 也无法使用polymer api 添加节点 因为它会在页面加载后添加所有标签 而 facebook 将无法读取这些标签 谷歌爬虫确实会渲
  • 如何在 Pygame 中根据角度移动精灵

    我在移动精灵时遇到问题 我可以毫无问题地在 x 轴和 y 轴上移动它们 我不知道如何才能按照某个角度移动它们 我的意思是 我正在尝试创建一个函数 其中包括我尝试移动的对象 其速度和方向 应以度为单位测量 就像是 MovingObject o
  • 在使用 Ant 编译的文件中找不到主类

    我在 Eclipse 中编译并运行我的程序 一切正常 但是当我用 Ant 打包它并运行它时 出现以下错误 Exception in thread main java lang NoClassDefFoundError org supercs
  • VS 2010 鼠标处理器扩展 - 不工作

    我正在尝试 Visual Studio 2010 扩展 其中我需要处理 IMouseProcessor 公开的事件 据我从文档中可以看出 我应该创建一个 IMouseProcessorProvider 并使用 MEF 导出 以便 Visua
  • 在 .NET 中比较 2 个 XML 文档的最佳方法[重复]

    这个问题在这里已经有答案了 我有一堆单元测试需要检查 XML 输出 我已经开始比较字符串 但是由于格式和表面差异的阻碍 这不会扩展 NET 中评估生成的 XML 在语义上是否与测试期望的相同的最简单方法是什么 Closed作为重复您将如何比
  • SQL“IN”语句的 Linq 版本

    我有以下 3 个表作为简单 项目标记 模式的一部分 物品 项目 ID 整数 品牌varchar 名称 varchar 价格钱 条件varchar 说明 varchar 有效位 Tags 标签 ID 整数 名称 varchar 有效位 标签映
  • 根据数据设置 Dojox 网格行的样式

    我正在尝试根据网格中的值在 DojoX 1 2 3 网格内设置行的样式 网格布局 var view1 noscroll true rows field TASK ID name ID width 80px get this getColor
  • SQL Server 性能 结果集 vs 输出参数 vs 返回值

    我正在权衡使用三种不同方法之一将单个标量值从存储过程返回到我的 C 例程的潜在性能影响 谁能告诉我其中哪个 更快 最重要的是 为什么 方法一 CREATE PROCEDURE GetClientId DealerCode varchar 1