在mysql8.0.23中
病例1
select *
from boards b
where b.id = 11
select *
from comments c
where c.board_id = 11
用例2
select b.*
, c.comments
from boards b
left outer join lateral (
select json_arrayagg(json_object(
'id', c.id,
'title', c.title,
...
)) as comments
from comments c
where c.board_id = b.id
) c on true
where b.id = 11
哪一个更有表现力?
我对反模式或类似的东西不感兴趣。
降低连接成本并一次获取所有数据是否更好?
还是没有JSON转换成本更好
案例2在我的测试中比较快,但它只是确认了查询的响应速度。我想知道什么mysql server可以在同一时间处理更多的查询。
1条答案
按热度按时间kmpatx3s1#
还要测试其“性能”:
或者选择(选择JSON_数组(...)从B,其中b.id=11)作为bbb(选择JSON_数组(...)从c,其中c.id=11)作为ccc ;
每个人都希望你的第二个版本,因为他们避免了到服务器的第二次往返,往返是总时间的一个重要部分。
如果B和c具有相同的列(这通常是一个糟糕的模式设计),则
这两个id是针对同一个值进行测试的,这是巧合还是故意的?