json_object() and `group by` Optimisation in MySQL



我的查询有一个优化问题,一旦我在我的查询中使用JSON_OBJECT()的聚合GROUP BY,性能受到严重影响,并且似乎JSON_OBJECT()函数被称为表中的每一行,即使有LIMIT

一旦没有更多的GROUP BY,查询执行得非常快。我抽象的查询,我使用到最简单的,但我需要GROUP BY原因

我正在使用JSON_ARRAYAGG()进行另一个连接。

我在我的表中得到了~25k行,当通过聚合

删除组时,需要的时间减少了10倍。
select JSON_OBJECT('id',`b`.`id`) as bw 
from a 
left join `b` on `a`.`id` = `b`.`id_a` 
group by `a`.`id` 
LIMIT 1;

一般来说,JSON应该用于存储结构化数据,只有应用程序需要查看这些数据。这是笨拙的,可能非常非常效率低下的MySQL挑选JSON用于WHERE,GROUP BY等。

对于GROUP BY(或ORDER BY) +LIMIT 1:

对于LIMIT, MySQL只是剥离它找到的第一行。——快多了,但是你得到哪一行是不可预测的。

对于Group或Order,它可能必须收集所有可能的行,将它们组合(分组或排序),然后才会剥离1行。——慢多了。

听起来你有一个"数组"每个JSON中有多少东西?RDBMS的等效方法涉及第二个来处理所有这些数组——每行一个元素。切换到可能会导致更快的代码。(我不太了解你的数据,不能给你具体的建议。)

最新更新