MySQL中的json_object()和“分组依据”优化

cgh8pdjw  于 2022-11-19  发布在  Mysql
关注(0)|答案(1)|浏览(193)

我的查询遇到了优化问题,一旦我在查询中使用聚合GROUP BYJSON_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;
sdnqo3pr

sdnqo3pr1#

一般来说,JSON应该用于存储结构化数据,* 只有 * 应用程序才需要查看这些数据。对于MySQL来说,将JSON与WHEREGROUP BY等一起使用是笨拙的,而且可能 * 非常 * 低效。
对于GROUP BY(或ORDER BY)加上LIMIT 1
使用LIMIT,MySQL只需剥离它找到的第一行。--速度快得多,* 但是 * 您得到的是哪一行是不可预测的。
对于Group或Order,它 * 可能 * 必须收集所有可能的行,对它们进行处理(分组或排序),然后 * 才 * 剥离1行。--慢得多。
听起来好像每个JSON中都有一个“数组”?RDBMS的等价物包括第二个 table 来处理所有这些数组--每行一个元素。切换到这个 * 可能 * 会导致代码更快。(我对您的数据不够了解,无法给予您一个具体的建议。)

相关问题