MySQL存储过程与PHP脚本

MySQL存储过程与PHP脚本,mysql,stored-procedures,Mysql,Stored Procedures,我在为一家珠宝批发商经营一个网站 他们所有产品的价格都是使用每晚更新的当前金条金属修复计算的 目前,对于该网站而言,计算是通过一个php包含函数完成的,在当前情况下,该函数可以正常工作 大约有10000种产品,但价格是实时计算的(即在请求网页时)。计算很简单,但是有很多(大约50+),我担心流量的增加可能会减慢当前脚本的速度 我正在重新设计这个网站,想知道在MySQL中创建一个过程来进行计算是否有益 这可能比当前的php脚本更快吗? 有人知道关于使用过程的好的阅读参考吗?如果您考虑这个问题的原因

我在为一家珠宝批发商经营一个网站

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

目前,对于该网站而言,计算是通过一个php包含函数完成的,在当前情况下,该函数可以正常工作

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

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

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

如果您考虑这个问题的原因是由于性能和可伸缩性,那么我建议继续使用PHP进行计算

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

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

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

这些问题当然都可以解决,不会有太多困难,但都会增加复杂性开销。

这里是一个存储过程与php的基准测试

存储过程的速度慢了10倍

您可能还希望了解以下内容:


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

我建议将您使用的信息缓存在内存中(可能使用memcached),并继续从PHP读取这些信息(如果不知道您是如何操作的,很难详细说明)


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

简而言之,将它们保存在PHP中。易于维护

对于当前站点,不太可能遇到性能问题,php中的计算速度与数据库中的计算速度之间的差异是显而易见的。如果你是,那么网站的代码就有一些根本性的错误。(这包括实时货币转换(如果正在进行)


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

关于使用memcachedn的好提示不知道为什么会被否决。不过,我对这个基准的准确性表示怀疑。我也不知道,我一整天都被否决了,没有找到合理的答案。我看到了这个问题。有些人只是想对评论投否决票,或者偶尔在无意中点击。我希望如果是这样的话,用户可以留下评论,解释为什么帖子或评论被否决。否决权应该有助于其他人的进步,而不应该成为发泄某人沮丧情绪的一种方式。这个基准并不是真正的基准。请阅读他选择运行基准测试的SQL查询。我同意楼上的回答。基准测试不调用任何mysql数据,因此很难看到sp或php脚本访问数据库的速度。感谢所有评论和链接。考虑到未来改头换面的麻烦,我想我会采取“如果它没有坏,就不要修”的方法。对于那些对我的答案投了反对票的人,你能详细说明原因吗?我相信这是一个正确的答案。