关于oracle中的in和exists的效率问题

作者&投稿:弋具 (若有异议请与网页底部的电邮联系)
oracle 中 in 和 EXISTS 哪个效率高啊~

EXISTS 效率高

这个还是要看 在not in 和 not exists 关联的是不是索引吧。我认为使用not in 之后,索引应该失效,不会使用索引去查询语句,not exists 会比 not in 快一些吧,效率高点

单说in和exsist,in的效率较差。
原理是什么我也不清楚,用数据库的人都这么说。

一般来说exists处理起来比in要快很多,优化SQL时一般都是建议将in改为exists,
从你所描述的情况来看:
and a.producttype in (select c.name from tr_ywlx c where c.fenlei!='广视通')---tr_ywlx数据相比之下很小很小,而且这个子查询只是表本身数据的筛选
and exists(select 1 from tr_ywlx c where c.fenlei!='广视通' and c.name = a.producttype)---这里是将tr_ywlx这个数据很小的表与100W笔数据的表关联起来了,形成了一个笛卡尔积,它要将两个表数据一对一进行比对,100W啊,肯定慢了

你给producttype做一个索引再试试

你的这个SQL实在是太复杂了,而且还用到了外链接,不知道为什么要写的这么复杂,我以前用过exists,比in的效率要高出很多。
关于EXISTS与IN的区别:
EXISTS检查是否有结果,判断是否有记录,返回的是一个布尔型(TRUE/FALSE)。
IN是对结果值进行比较,判断一个字段是否存在于几个值的范围中,所以 EXISTS 比 IN 快。

主要区别是:
exists主要用于片面的,有满足一个条件的即可,
in主要用于具体的集合操作,有多少满足条件.

exists是判断是否存在这样的记录,
in是判断某个字段是否在指定的某个范围内。
exists快一些吧 。

in适合内外表都很大的情况,exists适合外表结果集很小的情况。


oracle 中的comment on column什么意思
Oracle数据库中,"comment on column" 是一个非常重要的SQL命令,它用于对表中的列进行详细的描述和注解。当你需要为一张表的特定列添加注释,以便于其他用户或开发人员更好地理解和使用该表时,这个功能就显得尤为实用。具体操作是,通过使用 "comment on column tablename.columnname is ..." 的...

在oracle中怎么将两个表合在一起?
在Oracle中,将两个表合在一起可以通过多种方法实现,具体取决于合并的需求和目的。以下是几种常用的方法:1. 使用INSERT INTO SELECT语句:如果两个表具有相同的列和数据类型,并且你想将一个表的所有行插入到另一个表中,可以使用INSERT INTO SELECT语句。例如,假设有两个表table1和table2,你可以...

oracle中schema指的是什么
Schema,即XML Schema,XSD (XML Schema Definition)是W3C于2001年5月发布的推荐标准,指出如何形式描述XML文档的元素。XSD是许多XML Schema 语言中的一支。XSD是首先分离于XML本身的schema语言,故获取W3C的推荐地位。像所有XML Schema 语言一样,XSD用来描述一组规则──一个XML文件必须遵守这些规则,才能...

oracle有哪些常用的系统表啊?
dba_开头...dba_users 数据库用户信息 dba_segments 表段信息 dba_extents 数据区信息 dba_objects 数据库对象信息 dba_tablespaces 数据库表空间信息 dba_data_files 数据文件设置信息 dba_temp_files 临时数据文件信息 dba_rollback_segs 回滚段信息 dba_ts_quotas 用户表空间配额...

Oracle 的段(segment)管理
在Oracle数据库中,数据对象如表、索引、簇等的存储空间是以段的形式进行管理的。创建数据对象时,Oracle会为其自动分配存储空间,这些空间即为段。每个段只能存在于一个表空间中,但可以在同一表空间内的多个数据文件中分布。段由多个区组成,每个区用于保存特定的数据库对象。不同的数据对象对应不同的...

Oracle中的子查询中的in,any,all,这三个关键字的作用是什么我不清楚,谁...
楼主您好 in查询是包含 any大多数所用和in类似,in(1,2,3)相当于=any(1,2,3),和some这个关键字一样 区别是any可以用大于小于,比如 列1>any(1,2,3)就是查询列1 只要大于1,2,3其中任何一个数字就行,相当于列1>1 all同理 不过any是或查询 all是与查询 列1>all(1,2,3),相当于>...

oracle中||是什么
连接作用。 也就是可以把两个字段百的数据或者某些字符组成我们想要的表达形式 ORACLE数据库系统是美国ORACLE公司(甲骨文)提供的以分布式数据库为核心的一组软件产品,是目前最流行的客户\/服务器(CLIENT\/SERVER)或B\/S体系结构的数据库之一。比如SilverStream就是基于数据库的一种中间件。ORACLE数据库是目前...

oracle某个表的字段里面的值是clob是什么意思
该表的字段数据类型为CLOB。CLOB是Oracle数据库中的一种数据类型,用于存储大量的字符数据。以下是关于CLOB的 1. CLOB数据类型定义 CLOB用于存储字符数据,可以容纳大量的文本信息,如文章、报告或其他文档。这种数据类型特别适用于需要存储大量文本信息的场景。在Oracle数据库中,当某个字段需要存储大量的文本...

关于Oracle中的不等于号
在Oracle中,<> != ~= ^= 都是不等于号的意思。都可以使用。但是奇怪是的, 我想拿出price不是180000的商品时:(price是Number类型的)SELECT id, name FROM product where price<> 180000;执行这个语句时,priceis null 的记录不出来。也就是拿不到price是null的商品。必须使用:SELECT id, ...

大于1万字节的字串在oracle中应该用什么型别
大于1万字节的字串在oracle中应该用什么型别 表里面的的资料型别varchar2最多可以存放4000个位元组的资料。注意是位元组。一个字母占1个位元组,汉字占用2到3位元组。超过限制就需要使用clob了。SQL中30位元组应该用什么型别?如果考虑效能速度 应该用char(30)如果考虑储存空间 则用varchar(30)如果...

岳池县13285249043: oracle 中in和not in 的区别 -
赏毕复方: Oracle中关于in和exists,not in 和 not exists in和exists in 是把外表和内表作hash 连接,而exists是对外表作loop循环,每次loop循环再对内表进行查询. not exists:做NL,对子查询先查,有个虚表,有确定值,所以就算子查询有NULL最终也有值

岳池县13285249043: Oracle SQL的exists与in -
赏毕复方: 两个用法本来就有区别,IN判断字段的值有没有列表中,列表中的值少的情况下直接用IN,多的情况下建议用JOIN连接;EXISTS条件是判断子查询存在不存在符合的记录,并且只有有一条记录符合条件就判定EXISTS成立.

岳池县13285249043: oracle 中 in 和exists用法区别 -
赏毕复方: 是这样的 in 是返回的结果集 比如你只运行这一句 select sno from sc where cno='c002' 返回的是一列sno 但是exists则不同,返回的是布尔值 虽然里边那个没法单独运行 select * from sc a where cno='c001' and exists(select sno from sc b where cno='c002' and a.sno=b.sno) ; 后边必须要写上两者的关联

岳池县13285249043: oracle中in和exist的区别 -
赏毕复方: in 和 exists区别 in 是把外表和内表作hash join,而exists是对外表作loop,每次loop再对内表进行查询. 一直以来认为exists比in效率高的说法是不准确的. 如果查询的两个表大小相当,那么用in和exists差别不大. 如果两个表中一个较小,一...

岳池县13285249043: oracle数据库中in和exists的详细执行过程 -
赏毕复方: Exists用于只能用于子查询,可以替代in,若匹配到结果,则退出内部查询,并将条件标志为true,传回全部结果资料,in不管匹配到匹配不到都全部匹配完毕,使用exists可以将子查询结果定为常量,不影响查询效果In和exists对比:若子查询结果集比较小,优先使用in,若外层查询比子查询小,优先使用exists.因为若用in,则oracle会优先查询子查询,然后匹配外层查询,若使用exists,则oracle会优先查询外层表,然后再与内层表匹配.最优化匹配原则,拿最小记录匹配大记录.

岳池县13285249043: oracle数据库中in和exists的详细执行过程 -
赏毕复方: IN 其实与等于相似,比如in(1,2) 就是 = 1 or = 2的一种简单写法,所以一般在元素少的时候使用IN,如果多的话就用existsexists的用法跟in不一样,一般都需要和子表进行关联,...

岳池县13285249043: 关于Oracle中in和exists的区别 -
赏毕复方: 一般来说,这两个是用来做两张(或更多)表联合查询用的,in是把外表和内表作hash 连接,而exists 是对外表作loop 循环,假设有A、B两个表,使用时是这样的: 1、select * from A where id in (select id from B)--使用in 2、select * from A ...

岳池县13285249043: oracle中in和exist的区别 -
赏毕复方: in和exist的主要区别体现在对sql执行计划的影响上.传统上认为,如果子查询的条件更具选择性(selective),就用in;而如果父查询(外层查询)的条件更具选择性(selective),就用exist.具...

岳池县13285249043: oracle中in,not in和exists,not exists之间的区别 -
赏毕复方: 1、关于在Oracle8i时代中in和exists的区别这里有条SQL语句:select*fromAwhereidin(selectidfromB)以上查询使用了in语句,in()只执行一次,它查出B表中的所有id字段并缓存起来.之后,检查A表的id是否与B表中的id相等,如果相等则将A表

岳池县13285249043: oracle数据库里in 和exits 到底有什么区别 -
赏毕复方: 表A(小表),表B(大表) select * from B where cc in (select cc from A) 这个语句中是先从A表中把cc找出来,然后根据cc再在B中去找相关的cc 由于A表的cc远小于B表的cc 所以可以节省时间 select * from B exists (select cc from A where cc=B.cc)这句话是先从B表里把cc找出来 然后再在A表里找相关的cc 由于B表的cc远多于A表的cc 所以这样做很浪费时间总结: 用in 时 大表在前小表在后用exists时 小表在前大表在后

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网