Oracle中关于not in的替代方案

Oracle优化连接查询速度

今天在使用dblink的时候,多表关联时发现条件中使用 not in 作为条件,会极大的影响查询速度,尤其是not in中的表数据量很大时,简直是一种灾难;经过翻阅资料,找到两种比较好用的方法:

  1. 采用exists模式
  2. 采用Left join模式

样例

sql 复制代码
select columns from tab1 
where column1 not in (select column1 from tab2);

exists模式

sql 复制代码
select columns from tab1 where 
not exists(select 1 from tab2 where tab1.column1 = tab2.column1);

exists返回true或false,具体的问题研究建议找一些讲的比较深入的资料,本人才疏学浅,解释不清

Left join模式

sql 复制代码
select columns from tab1 
left join tab2 on tab1.column1 = tab2.column1
where tab2.column1 is null

左连接,以左表为主,副表tab2中 关联不到的就自动赋值null

不理解可以查下左连接关联的资料画画图
注: is null 可能有坑,建议使用 nvl(trim(tab2.column1),'自己指定值') = '自己指定值'

相关推荐
CyrusCJA7 小时前
在Windows系统上将Redis注册为系统服务使其实现开机自启
数据库·windows·redis·缓存
Y001112367 小时前
MyBatis
数据库·mybatis
qq_460978407 小时前
html标签怎么表示小字号文字_small标签语义说明【操作】
jvm·数据库·python
qq_413502027 小时前
SQL更新语句性能调优技巧_避免对索引列执行函数操作
jvm·数据库·python
2301_817672267 小时前
如何正确为包含浮动子元素的父容器设置完整背景色
jvm·数据库·python
Elastic 中国社区官方博客7 小时前
在 Discover 中探索来自新的时间序列数据流的指标
大数据·数据库·目标检测·elasticsearch·搜索引擎·数据分析·全文检索
2301_803875617 小时前
Redis如何通过永不过期策略规避击穿
jvm·数据库·python
2301_816660217 小时前
CSS中relative与absolute的区别_详解相对与绝对定位应用场景
jvm·数据库·python
qq_460978407 小时前
Golang怎么JWT设置过期时间_Golang如何在Claims中配置Token有效期【操作】
jvm·数据库·python
weixin_568996067 小时前
Cgo 中正确设置 C 结构体回调函数指针的完整方案
jvm·数据库·python