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

相关推荐
Han.miracle4 分钟前
Spring IoC 与 DI 核心知识点综合测试题
java·前端·数据库
_Jimmy_5 分钟前
mysql更新字段会更新索引吗
数据库·mysql
@PHARAOH8 分钟前
HOW - 本地基于 docker 快速构建 mysql 数据库
数据库·mysql·docker
数据知道15 分钟前
MongoDB读取偏好配置:如何优化查询路由策略?
数据库·mongodb
skiy23 分钟前
【MySQL 的数据目录】
数据库·mysql·adb
爬山算法25 分钟前
MongoDB(43)什么是嵌入式文档?
数据库·mongodb
_Jimmy_40 分钟前
mysql 键长如何计算
数据库·mysql
J2虾虾40 分钟前
通过Web界面来访问和操作MySQL数据库的开源项目
前端·数据库·mysql
雪碧聊技术44 分钟前
Oracle数据迁移指南:如何按主键顺序提取并迁移前10,000条记录(基于CSV)
数据库·oracle·数据导出·数据导入·数据备份、迁移
数据知道1 小时前
MongoDB压缩算法选择:snappy, zlib, zstd性能与压缩比对比
数据库·mongodb