【问题标题】:MySQL Stored Procedure vs PHP scriptMySQL 存储过程与 PHP 脚本
【发布时间】:2009-05-01 07:45:10
【问题描述】:

我正在为一家珠宝批发商运营一个网站。

他们所有产品的价格都是使用每晚更新的当前金银修复计算得出的。

目前,对于网站,计算是通过 php 包含函数进行的,在当前情况下可以正常工作。

大约有 10,000 种产品,但价格是实时计算的(即在请求网页时)。计算很简单,但有很多(大约 50+),我担心流量的增加可能会减慢当前脚本的速度。

我正在重新设计网站,想知道在 MySQL 中创建一个过程来进行计算是否有益。

这可能比当前的 php 脚本更快吗? 有谁知道关于使用程序的好的阅读参考资料吗?

【问题讨论】:

  • 感谢所有 cmets 和链接。我想我会采取“如果它没有坏,就不要修复它”的方法,考虑到未来改变它的麻烦。
  • 对于任何反对我的回答的人,您能详细说明原因吗?我相信这是一个有效的答案。

标签: mysql stored-procedures


【解决方案1】:

这是存储过程与 php 的基准测试。

http://mtocker.livejournal.com/45222.html

存储过程慢了 10 倍。

您可能还想看看这个:

http://www.tonymarston.net/php-mysql/stored-procedures-are-evil.html

【讨论】:

  • 不知道为什么这被否决了。不过,我对该基准的准确性持怀疑态度。
  • 我也不知道,我一整天都被否决了合法答案。
  • 我已经看到了这个问题。有些人只是想对 cme​​ts 投反对票,或者可能偶尔会在他们不打算这样做时点击。我希望如果 SO 强制用户对帖子或评论被否决的原因发表评论。投反对票应该有助于其他人的进步,而不应该是发泄某人沮丧情绪的一种方式。
  • 这个基准不是真正的基准。请阅读他选择运行基准的 SQL 查询。
  • 同意楼上的回复。基准测试不调用任何mysql数据,所以很难看出sp或php脚本访问数据库的速度对比。
【解决方案2】:

如果您考虑此问题的原因是性能和可扩展性,那么我建议您继续在 PHP 中进行计算。

这样做的原因是,无论您的 PHP 是否存在性能损失,当您扩展 Web 应用程序时,迁移到多个 Web 服务器通常比迁移到多个数据库服务器要容易得多。因此,最好在 PHP 中进行更多的计算,而在 MySQL 中进行更少的计算。

除了性能方面,我通常更喜欢避免存储过程,而是在应用程序中使用逻辑,因为

  • 它可能不太便携。存储过程增加了部署应用程序新实例所需的工作量。
  • 它们是用与 PHP 不同的语言编写的,因此 PHP 开发人员可能会觉得它们不容易理解。
  • 将它们保存在源代码管理中可能很困难。

这些问题当然都可以解决,没有太大的难度,但这都增加了复杂性开销。

【讨论】:

    【解决方案3】:

    如果绝对有必要更新每个页面请求的价格,并且您担心网站会获得大量流量,我不推荐使用存储过程。

    我建议将你使用的信息(如果不知道你是如何做的就很难详细说明)缓存在内存中(可能使用 memcached)并继续从 PHP 中读取它。

    我承认我没有在存储过程与内存中 PHP 性能之间进行任何基准测试,但如果该过程不直接影响您的查询,我建议缓存。

    【讨论】:

    • 关于使用 memcached 的好提示
    【解决方案4】:

    简而言之,将它们保存在 php.ini 中。更容易维护。

    对于当前站点,不太可能遇到性能问题,即 php 中的计算速度与数据库中的计算速度之间的差异非常明显。如果您是,那么该站点的代码存在根本性错误。 (如果完成,这包括实时货币转换)。

    也就是说,通常首选将 calc 保存在 PHP 中,因为它更易于控制和调试。它确实需要网络编码人员对数据库有所了解,但这通常不是问题。 90% 的代码加速发生在 10% 的代码上,如果发生这种情况,dba 很容易识别导致 db load 的查询。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-23
      • 2015-11-09
      相关资源
      最近更新 更多