场景

Oracle查询in超过1000条无法处理,这是oracle本身的特性,所以只能改逻辑或改业务。

解决方案

拆分为多个1000条以内查询,然后union all

可行,这是从代码层面来优化。

从设计上进行优化

例如权限配置,有几千个机构,采用扁平形式可能会有这个问题。
可用办法:
1、设计超级帐号,避过冗杂的权限设计。
2、设计权限层级,例如上级机构自动用有下级机构的权限,那么只需配置一个上级机构,就可以拥有多个子级的权限。

将in的list进行拆分,分批进行处理

java代码:

if(userList.size() > 500){
int count = 0;
while(count<userList.size()) {
int countNext = count + 500;
if(countNext > userList.size()) {
countNext = userList.size();
}

// handle 这样一次传入的条数就在500以内了

}
}