问题描述
一个ID集合长度不确定的 ,如何高效查询另一个表的关联数据
问题出现的环境背景及自己尝试过哪些方法
业务中获取到了一个列表,然后要使用该列表中的ID批量查询另一个数据表的数据。
因为长度不确定,可能很长,使用IN
性能会很差,请问有没有什么方法高效的查询或者说SQL该怎么写呢?
相关代码
例子:
List<User> list = list();
List<Long> userIds=...;
List<Order> orders=listByUserIds(userIds);
一个ID集合长度不确定的 ,如何高效查询另一个表的关联数据
业务中获取到了一个列表,然后要使用该列表中的ID批量查询另一个数据表的数据。
因为长度不确定,可能很长,使用IN
性能会很差,请问有没有什么方法高效的查询或者说SQL该怎么写呢?
例子:
List<User> list = list();
List<Long> userIds=...;
List<Order> orders=listByUserIds(userIds);
可以使用分批查询
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)));
8 回答6.5k 阅读
4 回答656 阅读✓ 已解决
2 回答3.4k 阅读
1 回答2.5k 阅读✓ 已解决
5 回答1.5k 阅读
3 回答1.9k 阅读✓ 已解决
2 回答2.2k 阅读
分批查?插入临时表再查?转成
json
然后用json_table()
查?你试试不同数量级,哪个快呗