ORACLE IN 与NOT IN 的性能区别
来源:互联网 发布:淘宝助理怎么复制店铺 编辑:程序博客网 时间:2024/06/06 14:23
业务问题大概可以这样描述,一个父表,一个子表,查询的结果是找到子表中没有使用父表id的记录,这种情况估计很多系统都会牵涉得到。让我们来举一个例子:
表一: 父表 parent
表二: 子表 childen
父表存储父亲,子表存储孩子,然后通过pid和父表关联,查询需要的结果是找到尚未有孩子的父亲。
我们来看一下查询语句的写法:
select * from parent where id not in (select pid from childen)
这种标准的写法在子表存在50万条的记录的时候,查询时间超过了10秒,远远大于原来的sql server服务器的一秒。我在解决的时候想到了一个方法:
select * from parent where id in
( select id from parent minus select pid from childen )
正常理解下,这个语句应该更加费时,但是事实完全出乎意料,这条语句不仅仅在子表存在大量记录的情况下速度良好,在子表少量数据的情况下速度也非常的好,基本在1秒内完成。
补充: sql - minus用法参考: http://www.1keydata.com/cn/sql/sql-minus.php
原文链接: http://www.cnblogs.com/iceword/archive/2011/02/15/1955363.html
阅读全文
0 0
- 简单介绍下JavaScript脚本语言
- tomcat 启动一闪而过
- 为什么 PyTorch 这么火?一线开发者这样说
- Oracle培训
- 做QT接触C++的这半年
- ORACLE IN 与NOT IN 的性能区别
- 一个概率题
- Hibernate的openSession和getCurrentSession区别
- 小程序获取用户unionid的方法
- android 内存优化
- Java 泛型详解
- Dynamics CRM 如何用CrmSvcUtil.exe生成前绑定类
- Access denied for user 'sa'@'localhost' (using password: NO) spring内配置hibernate 报错
- atop使用介绍