gpt4 book ai didi

php - 使用 Left Join 优化 Mysql 查询 Group_concat

转载 作者:行者123 更新时间:2023-11-29 09:27:35 26 4
gpt4 key购买 nike

这是我的查询

select image_tree.id, image_tree.parent_id, image_tree.url,
CONCAT(
'[',
GROUP_CONCAT(
JSON_OBJECT(
'lang', image_tree_title.lang,
'title', image_tree_title.title
)
), ']'
) AS lang from `image_tree`
left join `image_tree_title` on `image_tree_title`.`image_tree_id` = `image_tree`.`id`
group by `image_tree`.`url`, `image_tree`.`id`
order by url + 0 ASC

有人建议我删除 GROUP_CONCAT 并在 PHP 中对数据进行排序。 GROUP_CONCAT会对性能产生重大影响,什么是更好的方法,我认为最好在MYSQL中准备所有数据,并且不需要在PHP中进行额外的循环。

最佳答案

您最好只查询所需的字段并在客户端组装它们。您当前的 GROUP_CONCAT 和 JSON_OBJECT 方法会给数据库服务器带来更多工作,锁定表的时间更长,并增加了必须打包并从数据库发送到客户端代码的数据量。除非 MySQL 在连接内进行某种神奇的压缩或对 JSON 对象进行特殊打包,否则它将为您检索的每个数据值传回大量冗余的列名副本(以及格式)。

我不会说永远使用GROUP_CONCAT,它甚至可以用来做对特别弱的客户端来说可能太昂贵的工作......但它确实会带来开销;像 10000 这样的原始 INT 基本上可以用 4 个字节发送,但最好的情况是字符串 10000 需要 5 个字节。 JSON 增加了更多的开销; GROUP_CONCAT 扩展了较小的数据类型,并为分隔符添加了更多内容,而 JSON 则做到了这一点并添加了冗余字段命名语法。

尽管在 SQL 中排序很好,这就是它的构建目的(尽管我认为在要求极高的系统中甚至可以避免这种情况)。

关于php - 使用 Left Join 优化 Mysql 查询 Group_concat,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59311927/

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