场景
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以内了
}
}