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),'自己指定值') = '自己指定值'

相关推荐
KaiwuDB13 分钟前
深度剖析:KWDB SQL 编译与优化策略
数据库
翰林小院14 分钟前
【MongoDB】 MongoDB index overview
数据库·mongodb
Albert Edison21 分钟前
【MySQL】数据类型
数据库·mysql·adb·oracle
遇见火星28 分钟前
MYSQL-物理备份(xtrabackup)使用指南
数据库·mysql·adb
爱可生开源社区1 小时前
医疗业务系统升级,这家三甲医院为何牵手 OceanBase?(SQLServer->OceanBase)
数据库
huihuihuanhuan.xin1 小时前
后端八股之mysql
数据库·mysql
洋不写bug1 小时前
数据库数据类型,数据值类型,字符串类型,日期类型详解
数据库·mysql
Paraverse_徐志斌2 小时前
RAG架构(检索增强生成)与向量数据库
数据库·ai·llm·embedding·milvus·rag
NineData3 小时前
NineData将亮相第27届GOPS全球运维大会,并带来技术演讲
运维·数据库·ninedata·智能·ai agent·数据管理工具·gops全球运维大会
不良人天码星3 小时前
谈谈redis的持久化
数据库·redis·缓存