在线精品99_中国九九盗摄偷拍偷看_91免费版在线观看_91.app_91高清视频在线_99热最新网站

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

116次阅读
没有评论

共计 1355 个字符,预计需要花费 4 分钟才能阅读完成。

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

一、场景描述

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

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

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

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

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

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-07-13发表,共计1355字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)
主站蜘蛛池模板: 亚洲 欧美 国产 中文 | 欧美白人最猛性xxxxx | 最近中文字幕视频完整版在线看 | 久久久久久网 | 亚洲熟妇av一区二区三区 | 亚洲国产成人精品无码区在线播放 | 色94色欧美sute亚洲线路二 | 乌克兰少妇xxxx做受野外 | 国产成人tv在线观看 | 四虎影视在线影院在线观看 | 国产高潮视频在线观看 | 日本a级特黄特黄刺激大片 日本a级网站 | 欧美一级毛片免费看 | 日本aⅴ视频 | 日本在线观看 | 在线三级网 | 成人a免费α片在线视频网站 | 国产高清一区二区三区免费视频 | 一级黄视频 | 国产又色又爽又黄的 | 2020久久精品国产免费 | 国产女人高潮抽搐喷水视频 | 美女av一区二区三区 | 久热久| 先锋影音最新色资源站 | 蜜臀久久99精品久久久久久 | 天天综合天天影视色香欲俱全 | 国产精品任我爽爆在线播放 | 亚洲最大色网站 | av综合网男人的天堂 | 3388亚洲黄情网 | 青青草原免费在线 | 狠狠色噜噜狠狠狠97影音先锋 | 国产农村一国产农村无码毛片 | 久久频这里精品99香蕉久 | 亚洲成人精品久久 | 一级电影网 | 国产av无码日韩av无码网站 | 亚洲午夜福利在线视频 | 三级无码在钱av无码在钱 | 亚洲美免无码中文字幕在线 |