gpt4 book ai didi

php - MySQL还是PHP运行效率高?

转载 作者:行者123 更新时间:2023-11-29 18:13:38 24 4
gpt4 key购买 nike

我有一个疑问。

我有一个大型查询来获取网上商店的所有产品,然后我将数据处理为 CSV 以同步到另一个外部服务器,在本例中为 DooFinder。

现在我正在查询中进行处理。示例:

 - round((p.p_price*(SELECT tax_rate FROM tax_rates WHERE tax_rates.tax_rates_id=p.p_tax_class_id)/100)+p.p_price,2)
- concat('https://www.domain.de/pimg/',p.p_image) AS image, p.manufacturers_id

问题是:什么会更有效率?在查询中还是在 PHP 中进行操作?现在我在测试站点中有超过 20 个产品,并且效果完美,但目标是拥有 +1.000 个产品。

这是查询($i 代表每种语言,因此 +1.000 个产品 * 语言数量):

SELECT 
pd.p_name,
p.p_quantity,
concat('https://www.domain.de/pinf.php?products_id=',p.products_id) AS p_link,
pd.p_description,
p.p_id,
p.p_tax_class_id,
p.p_date_available ,
round((p.p_price*(SELECT tax_rate FROM tax_rates WHERE tax_rates.tax_rates_id=p.p_tax_class_id)/100)+p.p_price,2) AS price,
concat('https://www.domain.de/pimg/',p.p_image) AS image, p.manufacturers_id
FROM
products p,
p_description pd,
p_to_categories ptc
WHERE
p.p_id = pd.p_id
AND
pd.language_id = ".$i."
AND
p.p_status=1
AND
ptc.p_id = p.p_id
AND
ptc.categories_id != 218
GROUP by p.p_id

最佳答案

在决定是在客户端还是在数据库服务器上执行计算时,您应该考虑以下因素:

  • 哪一个有更多的空闲 CPU 周期?
  • 让客户端进行计算是否需要从服务器传输额外的数据?如果在服务器上执行此操作会减少数据传输,则可能值得让数据库 CPU 更加努力地工作。
  • 能否通过让客户端计算结果来减少数据传输?例如。假设客户端基于一列显示 100 个计算。在这种情况下,只获取该列而不是基于它的所有计算是有意义的。

在您的具体示例中,额外计算的开销相对于查询的其余部分来说是微乎其微的,因此,如果您已经对其进行了编码以在服务器上执行此操作,我会像这样保留它。同时,如果你在客户端做,也没有那么糟糕,所以我仍然不会费心去重构。

但是,我要解决一件事 - 将税率子选择重写为联接。即使 MySQL 优化器进行了适当优化,这一计算也会比任何计算产生更多的开销。

当然,正如评论中所建议的,对你的表现进行基准测试并根据这些测量结果做出决策。除了显而易见的问题之外,正确的基准测试还有一个额外的好处,那就是帮助发现奇怪的性能甚至功能错误,否则用户可能会在最糟糕的时间发现这些错误。

关于php - MySQL还是PHP运行效率高?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47206208/

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