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

相关推荐
剑锋所指,所向披靡!几秒前
初始MySQL
数据库·mysql
我是大猴子4 分钟前
解决并发的两种方法(没用到redis)(对上一期的补充)以及开启多个定时任务
数据库·redis·缓存
難釋懷9 分钟前
Redis分片集群散列插槽
数据库·redis·缓存
2501_911088239 分钟前
Web开发与API
jvm·数据库·python
2501_9110882311 分钟前
使用Python自动收发邮件
jvm·数据库·python
极客on之路13 分钟前
分库分表(四)
数据库
zklgin16 分钟前
【MySQL】深度学习数据库开发技术:使用CC++语言访问数据库
数据库·mysql·数据库开发
2401_8898846621 分钟前
使用Pandas进行数据分析:从数据清洗到可视化
jvm·数据库·python
李宥小哥26 分钟前
SQLite04-表数据管理
java·jvm·数据库
Smoothcloud_润云38 分钟前
GORM 事务管理与 Repository 模式完整指南
前端·数据库·代码规范