oracle 使用 in 关键字查询且集合数量大小大于1000
oracle 使用 in 关键字查询且集合数量大小大于1000
Oracle MyBatis 提示:java.sql.SQLSyntaxErrorException: ORA-01795: 列表中的最大表达式数为 1000
产生原因:oracle 使用 in 关键字查询且集合数量大小大于1000
解决办法:
第一种、将集合拆分,使用or 连接。
select * from A where id in (1, 2, …, 1000) or id in (1001, …, 1999)
第二种、将集合修改为查询语句
select * from A where id in (select id from B)
第三种、与 第二种 类似,使用 with as 语法,把条件封装成一个表
with temp as (select * from B)
select * from A where id in (select id from temp)
关于SQL in查询(单次查询)和for循环查询(多次查询) 效率论证
for查询:需要循环连接数据库,不仅占用大量连接池,而且多次的网络传输更是拖慢了总体的速度。(一般做过代码分析的都知道,程序其实并不会消耗太多时间,反而是网络请求消耗的时间较多)
in查询
首先 将多次连接直接降为一次,不仅节省连接池资源,且只进行一次网络传输。
其次 就是大家在考虑的in查询的问题。不妨这么去想:对于数据库自身的优化来说,数据库本身完全可以将in查询转为多次查询,然后组合起来返回结果。-- 这类似于for查询,但是比程序中for查询节省了多次连接和多次网络传输。数据库自身起码会优化到这样,那也就不必担心其效率比for查询低了
sql in 的替代方法
表a 有20w条数据 有个主键自动增长的id ,
这时,程序传过来4000多个id,中间用,隔开,我目前查询的写法是用in(4000个id),但这中方法太慢了 我想找个快的写法,能快速的查到数据
通过函数先把id转换成表,然后用join的方法select a.* from 源表 a inner join (转换后的id表) b on a.id=b.id
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
2019-07-18 web集群和分布式服务以及消息补偿机制几种方案
2019-07-18 什么是幂等性
2019-07-18 Dubbo面试常见问题
2019-07-18 mysql 缓存机制
2019-07-18 mysql面试题