gpt4 book ai didi

MySQL存储过程使用或不使用它们

转载 作者:IT老高 更新时间:2023-10-28 12:54:08 27 4
gpt4 key购买 nike

我们正处于一个新项目的开始,我们真的想知道是否应该在 MySQL 中使用存储过程。

我们只会使用存储过程来插入和更新业务模型实体。有几个表代表一个模型实体,我们将在那些存储过程插入/更新中对其进行抽象。

另一方面,我们可以从模型层调用插入和更新,但不是在 MySQL 中,而是在 PHP 中。

根据您的经验,哪个是最佳选择?两种方法的优点和缺点。就高性能而言,哪个是最快的?

PS:这是一个以读取为主的网络项目,高性能是最重要的要求。

最佳答案

与实际的编程语言代码不同,它们:

  • 不可移植(每个数据库都有自己的 PL/SQL 版本。有时相同数据库的不同版本不兼容 - 我见过!)
  • 不容易测试 - 您需要一个真实(开发)数据库实例来测试它们,因此几乎不可能将它们的代码作为构建的一部分进行单元测试
  • 不容易更新/发布 - 您必须删除/创建它们,即修改生产数据库以发布它们
  • 没有库支持(为什么在别人有的时候编写代码)
  • 不易与其他技术集成(尝试从它们调用网络服务)
  • 他们使用类似于 Fortran 的原始语言,因此完成有用的编码既不优雅又费力,因此很难表达业务逻辑,尽管通常这是他们的主要目的
  • 不提供调试/跟踪/消息记录等(一些 dbs 可能支持这一点 - 不过我还没有看到)
  • 缺少一个体面的 IDE 来帮助处理语法和链接到其他现有程序(例如 Eclipse 为 java 做的)
  • 熟练编码的人比应用程序编码员更稀有,也更昂贵
  • 它们的“高性能”是一个神话,因为它们在数据库服务器上执行它们通常增加数据库服务器负载,因此使用它们通常会减少您的最大事务吞吐量
  • 无法有效地共享常量(通常通过创建一个表并在您的过程中查询它来解决 - 非常低效)
  • 等等

如果您有一个非常特定于数据库的操作(例如,维护数据库完整性的事务中操作),或者让您的过程非常原子和简单,也许您可​​以考虑它们。

在预先指定“高性能”时建议谨慎。它通常会以牺牲良好设计为代价导致糟糕的选择,而且它会比你想象的更快地咬你。

使用存储过程需要您自担风险(来自曾经去过那里并且再也不想回去的人)。我的建议是像避免瘟疫一样避免它们。

关于MySQL存储过程使用或不使用它们,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6368985/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com