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

相关推荐
朝九晚五ฺ30 分钟前
【MySQL基础】MySQL事务详解:原理、特性与实战应用
数据库·mysql
切糕师学AI1 小时前
SQL中对字符串字段模糊查询(LIKE)的索引命中情况
数据库·sql
Dontla1 小时前
Postgres介绍(PostgreSQL)(开源对象关系型数据库管理系统)(与Mysql对比)
数据库·postgresql·开源
爬山算法2 小时前
MySQL(140)如何解决外键约束冲突?
数据库·mysql
云边散步2 小时前
🧱 第1篇:什么是SQL?数据库是啥?我能吃吗?
数据库·sql
AWS官方合作商2 小时前
如何连接 AWS RDS 数据库实例
数据库·云计算·aws
InnovatorX3 小时前
MySQL 备份与恢复指南
数据库·mysql
DIY机器人工房3 小时前
关于LVGL中文输入法的设置步骤:
服务器·前端·数据库·stm32·嵌入式硬件·嵌入式·diy机器人工房
极限实验室4 小时前
Console 纳管 Elasticsearch 9(二):日志监控
数据库·elasticsearch
isyangli_blog4 小时前
(1-7-3)数据库的基本查询
数据库·oracle