[英]Optimaze Mysql Query Group Concat with Left Join
这是我的查询
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 中排序很好,它就是为此而构建的(尽管我认为在要求极高的系统中甚至可能会避免这种情况)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.