ORACLE IN 与NOT IN 的性能区别
2017-08-22 11:27
309 查看
业务问题大概可以这样描述,一个父表,一个子表,查询的结果是找到子表中没有使用父表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
表一: 父表 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
相关文章推荐
- ORACLE IN 与NOT IN 的性能区别
- ORACLE IN 与NOT IN 的性能区别
- 【转】oracle in和exists、not in和not exists原理和性能探究
- oracle in和exists、not in和not exists原理和性能探究
- oracle中in,not in和exists,not exists之间的区别
- 浅谈sql中的in与not in,exists与not exists的区别以及性能分析
- oracle中in,not in和exists,not exists之间的区别
- oracle中in,not in和exists,not exists之间的区别
- oracle中in,not in和exists,not exists之间的区别
- EXISTS、IN、NOT EXISTS、NOT IN的区别与性能分析 (转载)
- EXISTS、IN、NOT EXISTS、NOT IN的区别与性能分析
- oracle中in,not in和exists,not exists之间的区别
- Oracle中 IN 和 EXISTS 的性能区别和使用注意事项
- [ORACLE]详解not in与not exists的区别与用法(not in的性能并不差!)
- Oracle性能调优:堆组织表和索引组织表区别
- oracle-exists和in的区别
- oracle中的exists和in的区别
- in与exist , not in与not exist 的区别
- enumerateObjectsUsingBlock 、for 、for(... in ...) 的区别 & 性能测试
- mysql查询语句in和exists二者的区别和性能影响