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

相关推荐
入瘾8 小时前
etcd 显示连接失败
数据库·chrome·etcd
本体智能8 小时前
预制指标、宽表、SQL、本体ABC:真正决定长期成本的,是一次变更会波及多少层
数据库·sql·本体神经网络·uino数据智能引擎
长安11088 小时前
数据库基础知识----数据库大观
数据库·oracle
瀚高PG实验室9 小时前
使用hgdbdeveloper开发工具导出数据后在异机恢复时报错
数据库·瀚高数据库
百结21410 小时前
PostgreSQL 初体验
数据库·postgresql
ward RINL11 小时前
Redis 安装及配置教程(Windows)【安装】
数据库·windows·redis
bingHHB11 小时前
金蝶云星空旗舰版 × 赛狐ERP:亚马逊卖家业财一体化的最后一公里
运维·数据库·集成学习
Nontee12 小时前
Redis高可用架构解析
数据库·redis·架构
淼淼爱喝水12 小时前
DVWA SQL 注入(Medium/High 级别)过滤绕过与防范实验(超详细图文版)
数据库·sql·网络安全
csdn_aspnet12 小时前
MySQL主从延迟根因诊断法,从网络、IO、SQL到参数,系统化定位高并发下的同步瓶颈
数据库·mysql·主从