【问题标题】:MySQL CONCAT performance vs. PHP concatenation performanceMySQL CONCAT 性能与 PHP 连接性能
【发布时间】:2016-09-11 12:33:15
【问题描述】:

我有一个包含 2 个字段的 SQL SELECT 请求:

SELECT `a`, `b` FROM `t`

ab 都是 VARCHAR(255)

我必须以这种方式连接它们:a (b)

我可以在数据库级别做到这一点:

SELECT CONCAT(`a`, ' (', `b`, ')') FROM `t`

或者在 PHP 脚本中:

$result = $resp['a'].' ('.$resp['b'].')';

哪种方式更正确、更高效?

附:我可以在自己的电脑上测试它,但是:

  1. 不同硬件上的结果可能不同;
  2. 我想了解这两种方式的优缺点,以便在我的项目中应用最佳实践。

【问题讨论】:

  • 您自己的测试告诉您什么?就个人而言,我认为 CONCAT 和 GROUP_CONCAT 几乎是无用的和对立的(除非你同时对数据做其他事情),但这里的其他人喜欢这些功能。
  • @Strawberry 我的测试告诉我,您应该阅读所有问题(以及 P.S. 部分)
  • 在几乎任何可能的情况下都完全不相关(从性能或功能的角度来看)。这听起来像是过早的优化。我个人会在数据库中执行此操作,但在应用程序中执行此操作可能有充分的理由。
  • @GordonLinoff 你能列出并解释这些原因吗?我之所以问这个问题,主要是因为这种“隐藏的知识”
  • 你的测试是如何得出这个结论的

标签: php mysql sql performance concatenation


【解决方案1】:

如果客户端和服务器在不同的机器上,那么你可能应该选择CPU使用率较低的机器。

与其他工作相比,concat(MySQL 或 PHP)的成本微不足道。我预计基准会以不到 1% 的差异返回。我的经验法则:不要担心不会提供至少 10% 的优化。专注于带来更多好处的优化。

在两种情况下,结果集中发送的字节数大致相同,因此这不是一个因素。

concat 的答案是否适用于其他情况?也许,也许不是。另一个例子是“我应该使用 MySQL 的 ORDER BY 还是 PHP 的 sort() 进行排序?再一次,这感觉就像另一个“抛硬币”问题。但是......在 SQL 中这样做可能有充分的理由:假设你是排序字符串并且您正在使用排序规则utf8mb4_unicode_520_ci。在 MySQL 中指定这是微不足道的。但是对于 PHP,您必须加载一些库并弄清楚如何使用它。(即便如此,性能可能非常相似。 )

【讨论】:

    猜你喜欢
    • 2012-07-01
    • 2015-04-27
    • 2023-03-13
    • 1970-01-01
    • 1970-01-01
    • 2016-05-17
    • 2018-05-09
    • 2015-07-29
    • 2020-09-12
    相关资源
    最近更新 更多