首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >MySQL存储过程使用或不使用它们

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

Stack Overflow用户
提问于 2018-03-21 03:36:56
回答 2查看 0关注 0票数 0

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

我们将只使用存储过程来插入和更新业务模型实体。有几个表表示模型实体,我们将在这些存储过程中抽象它--插入/更新。

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

根据你的经验,哪一个是最好的选择?这两种方法的优点和缺点。在高性能方面,哪一个是最快的?

PS:这是一个网络项目,主要是阅读和高性能是最重要的必要条件。

EN

回答 2

Stack Overflow用户

发布于 2018-03-21 11:56:54

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

  • 不是可移植的(每个db都有自己的PL/SQL版本。有时,不同版本的数据库是不兼容的--我见过!)
  • 不容易测试-你需要一个(Dev)数据库实例来测试它们,因此单元测试它们的代码作为构建的一部分几乎是不可能的。
  • 不容易更新/发布-你必须删除/创建它们修改用于释放它们的生产数据库。
  • 没有库支持(为什么在别人有代码的情况下编写代码?)
  • 不易与其他技术集成(尝试从它们调用Web服务)
  • 他们使用的语言和Fortran一样原始,因此要完成有用的编码是不优雅和费力的,因此很难表达业务逻辑,尽管这通常是他们的主要目的。
  • 不要提供调试/跟踪/消息日志等功能(一些DBS可能支持此功能--尽管我还没有看到)
  • 缺少一个合适的IDE来帮助语法和链接到其他现有过程(例如Eclipse对java所做的)
  • 熟练编写代码的人比应用程序编码者更少见,也更昂贵。
  • 它们的“高性能”是一个神话,因为它们通常在数据库服务器上执行。增加数据库服务器负载,所以使用它们通常减少您的最大事务吞吐量
  • 无法有效地共享常量(通常通过创建一个表并在您的过程中查询它---效率很低)。
  • 等等。

如果有一个非常特定于数据库的操作(例如维护db完整性的事务内操作),或者保持过程非常简单,那么你可能会考虑它们。

建议在前面指定“高性能”时要谨慎。它往往导致错误的选择,而牺牲了良好的设计,它会咬你比你想象的更快。

使用存储过程会带来危险(来自那些曾经在那里过过却再也不想回去的人)。我的建议是像躲避瘟疫一样避开它们。

票数 0
EN

Stack Overflow用户

发布于 2018-03-21 13:27:04

与编程代码不同,它们:

  • 呈现SQL注入攻击几乎不可能(除非您是 动态构建与执行 SQL在您的过程中使用)
  • 请求发送的数据要少得多。IPC作为标注的一部分
  • 使数据库能够更好地缓存计划和结果集(诚然,由于MySQL的内部缓存结构,这在MySQL中并不那么有效)
  • 易于单独测试(即不作为JUnit测试的一部分)
  • 它们是可移植的,因为它们允许您使用特定于db的特性,并将其抽象到过程名称后面(在代码中,您只能使用泛型sql类型的内容)。
  • 几乎从未比从代码中调用的sql慢。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100003207

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档