我的查询遇到了优化问题,一旦我在查询中使用聚合GROUP BY
和JSON_OBJECT()
,性能就会受到严重影响,而且似乎对表中的每一行都调用了JSON_OBJECT()
函数,即使存在LIMIT
。
一旦不再有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;
1条答案
按热度按时间sdnqo3pr1#
一般来说,JSON应该用于存储结构化数据,* 只有 * 应用程序才需要查看这些数据。对于MySQL来说,将JSON与
WHERE
、GROUP BY
等一起使用是笨拙的,而且可能 * 非常 * 低效。对于
GROUP BY
(或ORDER BY
)加上LIMIT 1
:使用
LIMIT
,MySQL只需剥离它找到的第一行。--速度快得多,* 但是 * 您得到的是哪一行是不可预测的。对于Group或Order,它 * 可能 * 必须收集所有可能的行,对它们进行处理(分组或排序),然后 * 才 * 剥离1行。--慢得多。
听起来好像每个JSON中都有一个“数组”?RDBMS的等价物包括第二个 table 来处理所有这些数组--每行一个元素。切换到这个 * 可能 * 会导致代码更快。(我对您的数据不够了解,无法给予您一个具体的建议。)