文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

sql in查询元素超过1000条如何解决

2023-03-09 17:55

关注

这篇文章主要介绍“sql in查询元素超过1000条如何解决”,在日常操作中,相信很多人在sql in查询元素超过1000条如何解决问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”sql in查询元素超过1000条如何解决”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

一、场景描述

查询机构下的人员,要同时查询出该机构及其所有下级机构的人员;比如查询北京市,不仅要查询出归属于北京市的人员,还要查询归属于出朝阳区、西城区、海淀区等等的人员。

对于这个需求,有以下几种解决思路:

1、之前的系统,他们的机构编码本身有关联,比如北京编码是001的话,昌平区的编码就是0012;这样的话,他们查询可以用like。这种方法的问题是like查询太慢,尤其在数据量大的时候,即使对编码加唯一索引,也只有查最根部机构时可以走索引(因为只有此时才符合最左前缀)。

2、我们的系统没有机构编码,唯一标识是雪花算法生成的19位id,没有关联;机构关系是通过一张关联表组合的起来的(适用于多业务系统,多机构树的情况)。这种情况,可以通过条件从关系表中查出所有下级机构id,然后查询时用in查询;为了方便查询,我们还建了一张机构关系冗余表。
但是这种方法也有一个问题,就是Oracle数据库in查询中元素,必须在1000以内。

二、解决方案

1、方案一:核心思路是,将集合拆分,使用or 连接。

select * from A where id in (1, 2, …, 1000) or id in (1001, …, 1999)

用mybatis的话就是这样

select * from test_1
<where>
 <if test="list != null and list.size > 0">
    (id IN
    <!-- 处理in的集合超过1000条时Oracle不支持的情况 -->
    <trim suffixOverrides=" OR id IN()">
        <foreach collection="list " item="Id" index="index" open="(" close=")">
            <if test="index != 0">
                <choose>
                    <when test="index % 1000 == 999">) OR id IN (</when>
                    <otherwise>,</otherwise>
                </choose>
            </if>
            #{Id}
        </foreach>
    </trim>
    )
 </if>

但是这种方法不好用,实测中3万条左右的机构,用这种查询查了好久都没出来,感觉数据库都要奔溃了。

2、方案二:用子查询(临时表)+关联查询

一般来说,超过1000多条的数据,肯定不是用户填写的,而是从其他地方查询出来的;我们可以将这些数据放到一个临时表中(用子查询实现),然后用内连接关联查询。

sql in查询元素超过1000条如何解决

该查询中,机构关系冗余表SEP_SYSTEM_ORG_RELATION中有20多万条数据,但子查询走了我们创建的组合索引;整个查询只用了0.367秒

sql in查询元素超过1000条如何解决

到此,关于“sql in查询元素超过1000条如何解决”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-数据库
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯