如何高效查询一个ID集合关联的数据?
问题描述
一个ID集合长度不确定的 ,如何高效查询另一个表的关联数据
问题出现的环境背景及自己尝试过哪些方法
业务中获取到了一个列表,然后要使用该列表中的ID批量查询另一个数据表的数据。
因为长度不确定,可能很长,使用IN
性能会很差,请问有没有什么方法高效的查询或者说SQL该怎么写呢?
相关代码
例子:
List<User> list = list();List<Long> userIds=...;
List<Order> orders=listByUserIds(userIds);
回答:
分批查?插入临时表再查?转成 json
然后用 json_table()
查?
你试试不同数量级,哪个快呗
回答:
可以使用分批查询
select id from table_name1 limit 1000 offset 0;select id from table_name2 limit 1000 offset 1000,
.....
然后再拿这table_name1返回的数据到table_name2查询
select xxx from table_name2 where id in (xxxx)
回答:
可以使用exists
可以把列表中的ID插入到数据库中的一张表table_name2里去,最好是t1.id = t2.id 这两个相关字段建立索引
select * from table_name1 t1 where exists (select 1 from table_name2 t2 where t1.id = t2.id)
回答:
JOIN查询,插入临时表后JOIN查询,并发查询...
List<Long> userIds = list();List<Order> result = new CopyOnWriteArrayList<>();
ListUtil.split(userIds, 999).parallelStream().forEach(userIdsSplit -> result.addAll(listByUserIds(userIdsSplit)));
以上是 如何高效查询一个ID集合关联的数据? 的全部内容, 来源链接: utcz.com/p/944797.html