【问题标题】:2 calls or a single call to sql server2 次调用或一次调用 sql server
【发布时间】:2012-12-13 00:10:19
【问题描述】:

我的 .net 应用程序中有一个操作,它在 2 个不同的 sql server 表中创建了一条记录。这里的最佳做法是什么?

一个存储过程应该创建两个记录吗? 或者 不同的存储过程是否应该在适用的数据库中创建每条记录并将两个调用包装在事务中,这样如果一个调用失败,两个调用都会失败?

哪个性能更好?

【问题讨论】:

  • 你可能还是想要一笔交易。这几乎可以肯定是过早的优化。以更清洁的方式进行。如果您真的很好奇,请使用这两种方法运行分析器以获取操作环境中的真实性能统计信息。

标签: c# sql-server stored-procedures transactions


【解决方案1】:

存储过程肯定会更高效。它还将导致您必须在服务器端编写的代码更少。缺点是,您现在需要知道如何自己编写 SQL,或者让与您一起工作的 DBA 为您编写。

关于您的另一个问题,在两个表中插入 1 个存储过程。

要考虑的另一件事:如果您必须在整个代码中执行大量此类操作,则可能值得学习一个好的 ORM 并在代码中完成所有这些操作(选项 2)。但如果这是一种一次性的事情,你只在少数地方做,那么存储过程将是一种更聪明的方法。

【讨论】:

    【解决方案2】:

    最好将您的逻辑放在 SQL Server 中的存储过程中并定义事务范围,当在 .net 应用程序中触发的此操作在存储过程中执行您的操作时,如果这两个操作成功完成,则提交事务,否则事务被回滚。 因为通过这种方式,您可以获得更好的性能。根据微软文档使用存储过程有一些好处如下:

    • 执行计划保留和重用
    • 查询自动参数化
    • 业务规则和策略的封装
    • 应用程序模块化
    • 在应用程序之间共享应用程序逻辑
    • 访问既安全又统一的数据库对象
    • 一致、安全的数据修改
    • 网络带宽节约
    • 支持系统启动时自动执行
    • 增强的硬件和软件功能
    • 提高安全性
    • 降低开发成本并提高可靠性
    • 通用例程的集中式安全、管理和维护

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-06-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-31
      • 2010-11-14
      • 1970-01-01
      相关资源
      最近更新 更多