oracle 10053 not in

admin3个月前软件教程44

今天我们来讨论一下Oracle数据库查询计划中的一个重要参数——10053中的not in。

我们知道,在Oracle数据库中,not in这个子句可以用于查询不在某个集合中的数据,比如:

SELECT * FROM students WHERE id NOT IN (SELECT id from absent_students);

那么问题来了,对于优化查询计划而言,not in的处理方式又是怎么样的呢?

首先,Oracle会将not in转化为not exists,比如上面那个例子,就会被转化为:

SELECT * FROM students s WHERE NOT EXISTS (SELECT NULL FROM absent_students a WHERE a.id = s.id);

接着,Oracle会再次转化not exists,把它转化为一组left outer join,比如:

SELECT s.* FROM students s LEFT OUTER JOIN absent_students a ON s.id = a.id WHERE a.id IS NULL;

通过这种方式,Oracle就能够提高查询效率,将not in的查询转化为更高效的left outer join了。

但是,这种转化方式并不是万能的。在一些特殊情况下,not in操作会带来比left outer join更高的性能开销。比如下面这个例子:

SELECT * FROM students WHERE id NOT IN (1,2,3,……,1000);

如果使用left outer join的方式,Oracle会对1000条数据进行匹配,即使匹配结果都是空的,也会产生不必要的性能开销。

在这种情况下,我们就需要采用一些其他的优化方式。比如,将not in中的数据存入一个临时表中,然后再使用not exists查询该表,就能有效避免这种性能问题,比如:

CREATE GLOBAL TEMPORARY TABLE temp_table (id NUMBER);INSERT INTO temp_table (id) VALUES (1);INSERT INTO temp_table (id) VALUES (2);INSERT INTO temp_table (id) VALUES (3);……INSERT INTO temp_table (id) VALUES (1000);SELECT * FROM students WHERE NOT EXISTS (SELECT NULL FROM temp_table WHERE temp_table.id = students.id);

这样,我们就可以提高查询效率,避免不必要的性能开销。

当然,这只是not in操作的一种情况。在实际操作过程中,我们还需要根据具体的情况选择不同的优化方式,以达到最大化查询效率的目的。

以上就是对于Oracle 10053中not in操作的说明,希望对大家有所帮助。

免责声明:本文内容来自用户上传并发布,站点仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。请核实广告和内容真实性,谨慎使用。

相关文章

哔哩哔哩1080p+是什么

哔哩哔哩1080p+是会员专属的画质播放,1080P+是指比1080P还要清晰的画面。bilibili(哔哩哔哩,又称:B站)是2009年6月推出的一个ACG相关的弹幕视频分享网站。其前身为视频分享网...

php mysql 集成安装包

php mysql集成安装包是一种方便、易用、快捷的编程工具。它是将PHP语言和MySQL数据库集成在一起的工具,可以实现查询数据库、数据插入、修改、删除等功能。对于需要快速开发网站的程序员来说,这个...

时间管理app有什么特别之处

如今生活节奏的日益加快,上班族们每天挤着公交、坐着地铁上班,穿越在浩瀚的人群当中,似乎已经没有了自己的生活,也不知道如何管理好自己的时间了。那时间管理app有什么特别之处呢?一、IntentionGe...

一款好的健身App开发是怎样的

市场上的健身App开发有很多,不同的App都有着不同的定位倾向,那一款好的健身App开发是怎样的呢?有的App开发周期长,有的App开发的周期短,有的开发难度大,有的开发功能简单,不同的让App开发都...

qq课堂缩小窗口会有记录吗

qq课堂缩小窗口不会有记录,其实QQ手机和电脑端的群课堂都是可以最小化或缩小窗口的,而且虽然窗口最小化了,但是直播间的课程却是一直在后台播放的。QQ是腾讯QQ的简称,是一款基于Internet即时通信...

蘑菇街直播开通了没有店铺怎么办

蘑菇街直播开通了不是必须有店铺的,但是作为后续想做自己品牌的主播,建议开家店更为合适,尤其是卖货能力强的主播,自己有店可以直接赚钱,也不用跟店主要分成。蘑菇街是专注于时尚女性消费者的电子商务网站,是时...