如何高效查询一个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

回到顶部