`
夜尽O天明
  • 浏览: 12277 次
  • 性别: Icon_minigender_1
  • 来自: 石家庄
社区版块
存档分类
最新评论

oracle in与exist的区别

阅读更多

oracle in与exists的比较

“exists”和“in”是Oracle中,都是查询某集合的值是否存在在另一个集合,但对不同的数据有不同的用法,主要是在效率问题上存在很大的差别。

 

select * from table_1 t where t.id in(select id from table_2) 

 

上面的查询使用了in语句,in()只执行一次,它查出table_2表中的所有id字段并缓存起来.之后,检查table_1表的id是否与table_2表中的id相等,如果相等则将table_1表的记录加入结果集中,直到遍历完table_1表的所有记录.

所以当table_2表数据较大时不适合使用in(),因为它会table_2表数据全部遍历一次.

如:table_1表有10000条记录,table_2表有1000000条记录,那么最多有可能遍历10000*1000000次,效率很差.

结论:in()适合table_2表比table_1表数据小的情况

 

select * from table_1 t1 where exists(select 1 from table_2 t2 where t1.id=t2.id)

 

上面的查询使用了exists语句,exists()会执行table_1.length次,它并不缓存exists()结果集,因为exists()结果集的内容并不重要,重要的是结果集中是否有记录,如果有则返回true,没有则返回false.

当table_2表比table_1表数据大时适合使用exists(),因为它没有那么遍历操作,只需要再执行一次查询就行.

如:table_1表有10000条记录,table_2表有1000000条记录,那么exists()会执行10000次去判断table_1表中的id是否与table_2表中的id相等.

如:table_1表有10000条记录,table_2表有100000000条记录,那么exists()还是执行10000次,因为它只执行table_1.length次,可见table_2表数据越多,越适合exists()发挥效果.

结论:exists()适合table_2表比table_1表数据大的情况

当table_1表数据与table_2表数据一样大时,in与exists效率差不多,可任选一个使用.

 

分享到:
评论

相关推荐

    简述Oracle中in和exists的不同

    一直以来,大家认为exists比in速度快,其实是不准确的。且看接下来的具体分析:in其实是将外表和内表进行hash join,exists是先对外表进行loop操作,然后每次loop后再对内表进行查询。 如果两张表大小差不多,那么...

    presto-oracle

    Presto OraclePlugin This is a plugin for Presto that allow ...Oracle Driver is not available in common repositories, so you will need to download it from Oracle and install manually in your repository.

    Oracle In和exists not in和not exists的比较分析

    in和exist的区别 从sql编程角度来说,in直观,exists不直观多一个select, in可以用于各种子查询,而exists好像只用于关联子查询 从性能上来看 exists是用loop的方式,循环的次数影响大,外表要记录数少,内表就...

    oracle数据库关于exists使用

    ### Oracle数据库中Exists与In的使用详解 #### 一、Exists 的使用方法 在Oracle数据库中,`EXISTS` 是一种常用的子查询操作符,用于判断子查询是否有结果返回。如果子查询至少返回一行数据,则 `EXISTS` 表达式的...

    Centos 7.4 配置 oracle 自启动

    # If the executables do not exist -- display error if [ ! -f $ORACLE_HOME/bin/dbstart ] || [ ! -d $ORACLE_HOME ]; then echo "Oracle startup: cannot start" exit 1 fi # Depending on parameter -- ...

    Oracle安装单机后自启动参数配置.txt

    # if the executables do not exist -- display error if [ ! -f $ORACLE_HOME/bin/dbstart -o ! -d $ORACLE_HOME ] then echo "Oracle startup: cannot start" exit 1 fi # depending on parameter -- startup, ...

    oracle开机自启脚本

    - 查找与当前Oracle实例相关的行(如:`orcl:/usr/oracle/app/product/11.2.0/dbhome_1:N`)。 - 将该行最后的`N`改为`Y`,表示此实例应该在系统启动时自动启动(例如:`orcl:/usr/oracle/app/product/11.2.0/...

    ubuntu 8.0.4 server 安装oracle10.2成功

    2. 这些软件包包含了编译Oracle软件所需的工具与库,例如编译器、链接器等。 #### 四、配置PuTTY支持X11转发 为了能够在远程连接时显示Oracle的GUI安装程序,需要配置PuTTY支持X11转发。 1. 在Ubuntu的`/etc/ssh/...

    最完整的Toad For Oracle使用手册

    - **Toad and Oracle Enterprise Manager**:介绍了Toad如何与Oracle Enterprise Manager集成,以便于更好地管理和监控Oracle环境。 #### 三、快速搜索与资源 - **Quick Search Bar**:通过快速搜索栏可以快速定位...

    oracle常见错误号

    13. ORA-02292:integrity constraint (constraint name) violated - child record found - 违反外键约束,子表中有与父表相关的记录。删除或更新数据前检查关联关系。 14. ORA-00936:missing expression - SQL...

    SQL优化之针对count、表的连接顺序、条件顺序、in及exist的优化

    本文将深入探讨四个关键的SQL优化策略:count、表的连接顺序、条件顺序以及in和exist的使用。 首先,让我们关注`count()`函数的优化。通常认为`count(*)`统计所有行,而`count(列名)`只计算指定列的非空值。许多人...

    oracle sqL 性能优化1

    #### 十七、NOT EXIST与NOT IN的区别 NOT IN在某些情况下可能无法正常工作,尤其是在处理NULL值时。此时使用NOT EXISTS是一个更好的选择,因为它可以正确处理NULL值。 #### 十八、利用EXISTS代替COUNT DISTINCT ...

    “exists”和“in”的效率问题

    ### "Exists"与"In"的效率问题详解 #### 引言 在数据库查询语言SQL中,“Exists”与“In”是两种常用的子查询方法,它们在实际应用中各有优势与局限。本文将深入探讨这两种方法的工作原理、应用场景以及性能差异,...

    oracle性能问题总结

    Oracle数据库的性能优化是数据库管理员和开发人员关注的重点,它涉及到多个方面,包括数据库参数配置、索引管理、SQL查询优化以及表设计等。以下是对这些知识点的详细说明: 1. **系统级优化** - **数据库参数配置...

    Oracle定时计划.docx

    ### Oracle数据库定时计划备份知识点详解 #### 一、概述 在企业级应用环境中,数据库的安全性和数据的完整性至...通过上述步骤,可以在Windows环境下轻松实现Oracle数据库的定时自动备份,提高数据安全性与管理效率。

    easyload 9.0

    MapInfo空间数据库建立 MapInfo空间数据库方案: 数据库:Oracle9i 数据上传工具:easyload ...use, this column must exist in order for MapX to correctly identify and apply record-level styles. NULL

    利用 Oracle 和 PHP 管理分布式跟踪文件

    -------------------------------------------------------------------------------------Deployment InstructionsOracle Layer The Oracle JServer must be installed and exist in a valid state. Ensure that ...

    oracle+ora-各种常见java.sq

    在Oracle数据库操作中,我们经常会遇到与`java.sql.SQLException`相关的异常。这个异常通常是Java应用程序在尝试与Oracle数据库进行交互时出现的问题。本篇将详细探讨`java.sql.SQLException`的各种常见类型及其解决...

    Oracle第15章PLSQL程序设计.pptx

    Oracle的PL/SQL程序设计是数据库管理中一个重要的部分,主要涉及存储过程、函数、局部子程序和包等概念,这些功能模块使得开发者能够编写复杂的业务逻辑并存储在数据库中,便于高效执行和管理。 15.1 存储子程序 ...

Global site tag (gtag.js) - Google Analytics