MySQL中的数学函数比PHP快吗?

时间:2014-06-26 08:26:46

标签: php mysql

我已经在MySQL工作了一段时间,但我从未真正使用过支持的mathematical functions,例如FLOOR()SQRT(),{{1等等。

在查询中使用这些函数是否更快/更好?而不是仅仅使用PHP在结果集上执行相同操作?

编辑:我不认为此问题与this重复,因为我的问题是关于数学函数,在页面上列出我链接了 CRC32()CONCAT()或该问题中的任何其他功能。请在标记之前考虑这一点。

4 个答案:

答案 0 :(得分:3)

对此没有一般性的答案。你当然不应该用SQL而不是PHP来做数学;如果有的话,它确实没有那么大的差别。但是,如果您正在进行SQL查询,并且您可以选择在将其发送到MySQL或查询本身之前在PHP中执行操作......它仍然不会产生太大的影响。通常会出现逻辑差异,就完成操作的时间和频率以及需要的执行位置以及执行此操作的代码最佳位置而言保持良好的可维护性和重用性。这应该是你的第一考虑,而不是表现。

总的来说,你必须为其中的任何一个做一些真正的复杂的数学运算才能产生任何不同。几乎任何语言和环境中的一些简单的数学运算都是微不足道的。如果有疑问,请根据具体情况进行基准测试。

答案 1 :(得分:3)

在PHP中执行此操作会更有效。

如果您为一个用户更快地谈论,那么更快取决于所涉及的机器。如果您在一百万用户访问网站时谈论得更快,那么在PHP中进行这些计算会更有效率。

运行PHP的Web服务器的负载非常容易分布在大量计算机上。这些机器可以并行运行,处理访问者的请求并从数据库中获取必要的信息。但是,数据库并不容易并行运行。复制或分片等问题很复杂,可能需要专业软件和正确组织的数据才能正常运行。与将另一个PHP安装添加到服务器阵列相比,这些是昂贵的解决方案。

因此,数据库计算机上CPU周期的值远远超过Web服务器上的值。因此,您应该在Web服务器上执行这些数学函数,其中CPU周期更便宜并且更容易并行化。

答案 2 :(得分:1)

MySQL在SQL查询范围内更快。 PHP在PHP代码中更快。如果你进行SQL查询以找出SQRT()它应该肯定更慢(除非PHP被破坏)因为MySQL解析器和网络开销。

答案 3 :(得分:1)

就像deceze所说,在SQL和PHP中使用数学函数之间的速度可能没有多大差别。如果您真的很担心,您应该始终对两个用例进行基准测试。

然而,我想到的一个例子是,使用SQL数学函数比使用PHP数学函数更好:当你不需要对数据库的结果执行任何额外的操作时。如果您在MySQL中执行操作,则可以避免在PHP中循环遍历结果。

还需要考虑并考虑扩展。你通常有一个MySQL服务器(如果你有一个以上,那么你可能已经知道了所有这些)。但是,您可以将许多Web服务器连接到同一MySQL服务器(例如,在具有负载平衡器时)。

在这种情况下,将计算移动到PHP以获取MySQL的负载会更好。添加更多Web服务器比提高MySQL的性能“更容易”。从理论上讲,您可以添加无限量的Web服务器,但内存量和处理器速度/数量。 MySQL服务器中的核心是有限的。您可以通过其他方式扩展MySQL,例如使用MySQL集群或进行主从复制和从奴隶读取,但这样做总是更复杂/更难。