如何高效查询一个ID集合关联的数据?

新手上路,请多包涵

问题描述

一个ID集合长度不确定的 ,如何高效查询另一个表的关联数据

问题出现的环境背景及自己尝试过哪些方法

业务中获取到了一个列表,然后要使用该列表中的ID批量查询另一个数据表的数据。
因为长度不确定,可能很长,使用IN性能会很差,请问有没有什么方法高效的查询或者说SQL该怎么写呢?

相关代码

例子:

List<User> list = list();
List<Long> userIds=...;
List<Order> orders=listByUserIds(userIds);

阅读 2.4k
4 个回答

分批查?插入临时表再查?转成 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)));
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题