博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
mybatis中oracle in>1000的处理
阅读量:6915 次
发布时间:2019-06-27

本文共 717 字,大约阅读时间需要 2 分钟。

oracle数据库中,如果你使用in,然后括号对应的是一个子查询,当查询出来的结果>1000的时候就会报错。

 

这个是数据库的规定,我们无法改变它。

如何解决这个问题呢?

现在我看到了三种解决方式:

1、使用in限制范围为1000,那么就使用多个in拼接。

in (x,x,x) or in (y,y,y) or in ...

这种方法我尝试过,感觉最不好用,如果数据量小的话ok,我哪里才几万条数据就卡,相当于执行多条sql语句。

别人的评价:

一般来说,不建议使用很复杂的sql语句。可以简单的认为,sql语句执行的时间复杂度与sql语句的长度相关。in太多,在数据量过大的时候,可能就不是慢的问题了,而是sql执行线程locked。常见的处理方式,是将“条件部分符合”的数据一次性全从数据库中拿出来,然后在代码中,遍历这些记录,找出符合条件(in条件)的记录。充分利用服务器的计算能力,以期减少数据库的压力。

2、使用临时表,将in中的内容查询插入临时表中。然后子查询进行匹配。这个我没有尝试。有空试试。

前面以为in对应子查询如果里面的内容>1000会报错,尝试了一下,不报错。

select * from mpmerdtl where agent_ID in(select member_id from mpagent)

 

3、不要使用in关键字,直接使用表连接。个人感觉这种是速度最快的一种。我出现这问题的时候解决方式就是手写的sql。

left join...

 

感觉这样看来解决的三种方案,第一种是因为in的数据是集合,不是表中的,所以拆分成1000以内的n个集合进行查询拼接。第二种子查询,第三种连接查询。

 

欢迎大家见解!

转载地址:http://lrncl.baihongyu.com/

你可能感兴趣的文章
RocketMQ Java 客户端实现
查看>>
hdu 1133 Buy the Ticket (大数+递推)
查看>>
java:Java里数字转字符串前面自动补0的实现
查看>>
获取图片颜色的rgb,以供css设计背景颜色
查看>>
org.tinygroup.validate-验证框架
查看>>
人脸识别中的harr特征提取(转)
查看>>
Windows 8 Metro App开发[6]访问Assets文件夹
查看>>
Cpython的全局解释器锁(GIL)
查看>>
session共享方法
查看>>
ASP.NET AJAX web chat application
查看>>
14--Rails的ActiveView2
查看>>
UVa 496 - Simply Subsets
查看>>
java基础思维导图大全
查看>>
C# 面向对象7 命名空间
查看>>
MySQL单机上多实例安装
查看>>
java8 增强的Iterator遍历集合元素
查看>>
Codeforces Round #566 (Div. 2) B. Plus from Picture
查看>>
Linux命令(23)grep命令的使用
查看>>
自己动手制作一个本地的yum仓库
查看>>
2015年毕业生收到的offer和薪资透露
查看>>