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

相关推荐
xxxibolva1 小时前
SQL 学习
数据库·sql·学习
孪生质数-1 小时前
MySQL主从延迟根因诊断法
数据库·mysql
bLEd RING2 小时前
Redis 设置密码无效问题解决
数据库·redis·缓存
WiChP2 小时前
【V0.1B5】从零开始的2D游戏引擎开发之路
java·服务器·数据库
75115893 小时前
笔记:postgresql如何下载驱动并安装?
数据库·postgresql
荒川之神3 小时前
拉链表概念与基本设计
java·开发语言·数据库
Highcharts.js3 小时前
适合报表系统的可视化图表|Highcharts支持直接导出PNG和PDF
javascript·数据库·react.js·pdf
刘~浪地球3 小时前
Redis 从入门到精通(一):简介、安装与配置
数据库·redis·缓存
APIshop3 小时前
Java获取京东商品详情接口(item_get)实战指南
java·linux·数据库
Bat U3 小时前
MySQL数据库|联合查询
数据库·mysql