MySQL CONCAT性能与PHP连接性能

MySQL CONCAT性能与PHP连接性能,php,mysql,sql,performance,concatenation,Php,Mysql,Sql,Performance,Concatenation,我有一个带有两个字段的SQL选择请求: SELECT `a`, `b` FROM `t` (a和b都是VARCHAR(255)) 我必须这样连接它们:a(b) 我可以在DB级别执行此操作: SELECT CONCAT(`a`, ' (', `b`, ')') FROM `t` 或者在PHP脚本中: $result = $resp['a'].' ('.$resp['b'].')'; 哪种方法更正确、更有效 另外,我可以在自己的电脑上测试,但是: 不同硬件上的结果可能不同 我想知道这两种方法的

我有一个带有两个字段的
SQL选择
请求:

SELECT `a`, `b` FROM `t`
a
b
都是
VARCHAR(255)

我必须这样连接它们:
a(b)

我可以在DB级别执行此操作:

SELECT CONCAT(`a`, ' (', `b`, ')') FROM `t`
或者在PHP脚本中:

$result = $resp['a'].' ('.$resp['b'].')';
哪种方法更正确、更有效

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

  • 不同硬件上的结果可能不同
  • 我想知道这两种方法的优缺点,以便在我的项目中应用最佳实践

  • 如果客户机和服务器位于不同的机器上,那么您可能应该选择CPU使用率较低的机器

    与其他工作相比,concat(MySQL或PHP)的成本非常小。我预计基准测试结果的差异将小于1%。我的经验法则是:不要担心优化不会给出至少10%的结果。专注于提供更多好处的优化

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


    concat的答案是否适用于其他情况?也许,也许不是。另一个例子是“我应该使用MySQL的
    orderby
    或PHP的
    sort()
    进行排序吗?”同样,这感觉像是另一个“掷硬币”的例子“问题。但是在SQL中这样做可能有一个很好的理由:假设您对字符串进行排序,并且使用排序规则
    utf8mb4\u unicode\u 520\u ci
    。这在MySQL中很容易指定。但对于PHP,您必须加载一些库并了解如何使用它。(即使如此,性能也可能非常相似。)

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

    与其他工作相比,concat(MySQL或PHP)的成本非常小。我预计基准测试结果的差异将小于1%。我的经验法则是:不要担心优化不会给出至少10%的结果。专注于提供更多好处的优化

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


    concat的答案是否适用于其他情况?也许,也许不是。另一个例子是“我应该使用MySQL的
    orderby
    或PHP的
    sort()
    进行排序吗?”同样,这感觉像是另一个“掷硬币”的例子“问题。但是在SQL中这样做可能有一个很好的理由:假设您对字符串进行排序,并且使用排序规则
    utf8mb4\u unicode\u 520\u ci
    。这在MySQL中很容易指定。但对于PHP,您必须加载一些库并了解如何使用它。(即使如此,性能也可能非常相似。)

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