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

相关推荐
特别关注外国供应商4 分钟前
Gartner 2025 备份和数据保护平台的魔力象限,哪些供应商在内?
数据库
moton20178 分钟前
TLS会话恢复机制深度解析:Session ID、Ticket 与 TLS1.3 PSK架构
数据库·网络协议·安全·架构·ssl·物联网架构
jnrjian10 分钟前
Oracle 收缩8TB 磁盘空间遇到的问题
数据库·oracle
升鲜宝供应链及收银系统源代码服务10 分钟前
生鲜配送供应链管理系统源代码之升鲜宝社区团购商城小程序(一)
java·前端·数据库·小程序·notepad++·供应链系统源代码·多门店收银系统
Ricky_Theseus16 分钟前
SQL数据控制9动词
数据库·sql·oracle
light blue bird17 分钟前
多Tab页签高索引组轴可视化图表
jvm·数据库·.net·桌面端·ai大数据
ai安歌18 分钟前
学生管理系统——Django科研成果与竞赛加分模块设计:从模型到视图的完整实现
数据库·django·sqlite
njsgcs23 分钟前
向量数据库处理分类任务和神经网络处理分类任务的区别
数据库·人工智能
de_wizard23 分钟前
mysql查看binlog日志
数据库·mysql
EasyGBS26 分钟前
告别低效巡检,国标GB28181视频分析平台EasyGBS视频质量诊断助力智慧城市安防精细化落地
数据库·音视频·智慧城市