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

相关推荐
2***656318 分钟前
数据库操作与数据管理——Rust 与 SQLite 的集成
数据库·rust·sqlite
V***u45325 分钟前
如何查看PostgreSQL的版本
数据库·postgresql
倔强的石头_29 分钟前
openGauss向量数据库:赋能智能制造的工业AI实践
数据库
口嗨农民工1 小时前
3.2 mysql客户端和服务器的启动与停止
数据库·mysql
e***19352 小时前
【SqlServer】SQL Server Management Studio (SSMS) 下载、安装、配置使用及卸载——保姆级教程
数据库·sqlserver
6***B482 小时前
存储过程(SQL)
android·数据库·sql
小马爱打代码2 小时前
避坑指南:MySQL 迁移到 TiDB
数据库·mysql·tidb
一个天蝎座 白勺 程序猿3 小时前
Apache IoTDB(10):数据库操作——从查询到优化的全链路实践指南
数据库·apache·时序数据库·iotdb
普普通通的南瓜3 小时前
IP证书在关键信息基础设施安全防护中的实践与挑战
网络·数据库·网络协议·tcp/ip·安全·ssl