繁体   English   中英

在MySQL或PHP中高效运行?

[英]Efficiency operating in MySQL or PHP?

我有个疑问。

我有一个很大的查询要获取网上商店的所有产品,然后将数据处理为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优化器进行了适当的优化,这也将比任何计算具有更多的开销。

并且,当然,如评论中所建议的那样,对性能进行基准测试,并根据这些测量结果做出决策。 除了显而易见的基准测试之外,适当的基准测试还有一个好处,即可以帮助您找到奇怪的性能,甚至发现功能性错误,否则用户可能会在最坏的时间发现这些错误。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM