栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

SQL语句 in+集合过长的问题

SQL语句 in+集合过长的问题

解决SQL语句 in 集合过长的问题
问题:在公司写查询时候,在写人员权限查询时候,部门性质表是一张层层嵌套迭代的表(部门id,父部门id,部门级别),需求场景需要找到部门所有下级部门,按权限查询数据。
正常思路:

查询当前所在部门 编码 级别 循环迭代下级部门 拿下级部门编码 父编码 级别 继续循环
mapper层入参:

List queryUser(@Param("deptCode") List> deptCode);
        
            and
            
                b.OBJ_MRC in
                
                    #{item}
                
            
        

SQL in集合长度大于1000会报错(解决方法把一个集合拆分为多个小于集合

切分in集合两种方法
    public static List> splitList(List list, int len) {
        //list为需要拆分的集合    len 拆分的长度
        if (list == null || list.size() == 0 || len < 1) {
            return null;
        }
        List> result = new ArrayList>();
        int size = list.size();
        int count = (size + len - 1) / len;
        for (int i = 0; i < count; i++) {
            List subList = list.subList(i * len, ((i + 1) * len > size ? size : len * (i + 1)));
            result.add(subList);
        }
        return result;
    }

    public Map groupList(List list) {
        int listSize = list.size();
        int toIndex = 1000;
        Map map = new HashMap();     //用map存起来新的分组后数据
        int keyToken = 0;
        for (int i = 0; i < list.size(); i += 1000) {
            if (i + 1000 > listSize) {        //作用为toIndex最后没有100条数据则剩余几条newList中就装几条
                toIndex = listSize - i;
            }
            List newList = list.subList(i, i + toIndex);
            map.put("keyName" + keyToken, newList);
            keyToken++;
        }
        return map;
    }
改进

当in集合 集合长度特别长的时候 sql查询效率会非常低下,数据量特别大的时候不建议使用这种方式。

改进方式

新增部门横向拉伸表 把纵向循环迭代的部门表 水平横向拉伸 权限查询时使用连表查询的方式提高SQL查询效率
1.定时任务,从原表拉数据定时更新部门横向拉伸表
2.从BI大数据部门数据平台导数

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/780894.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号