一、EXISTS 并非总比IN 快,究竟应该选用 IN 还是 EXISTS ,可参考以下分析:
1、Select * from t1 where x in ( select y from t2 )
相当于
select *
from t1, ( select distinct y from t2 ) t2
where t1.x = t2.y;
2、select * from t1 where exists ( select null from t2 where y = x )
相当于
for x in ( select * from t1 )
loop
if ( exists ( select null from t2 where y = x.x )
then
OUTPUT THE RECORD
end if
end loop
如果t2的记录很多而t1的记录相对较少的话,建议采用第二种写法;相反,如果t1的记录很多而t2的记录相对较少,则建议采用第一种写法。
其它情况,则需要仔细分析再决定是选择IN还是选择EXISTS
二、NOT IN 并不等价于NOT EXISTS
例如下面这两个句子,只有在t1.c1不为NULL的时候,两者返回的记录才是相同的,大家在用NOT EXISTS来替换NOT IN 时可能会忽略掉这一点
select t1.*
from table1 t1
where not exists
(select t2.c1 from table2 t2 where t2.c1 = t1.c1)
select t1.*
from table1 t1
where t1.c1 not in (select t2.c1 from table2 t2)
发表评论
-
一个简单的随机数字串函数,欢迎拍砖改进
2006-02-22 14:41 698static public string GenRandom ... -
一个简单的e-mail校验函数,欢迎拍砖改进
2006-02-22 15:13 757/// <summary> /// 校验是否 ... -
一个简单的取用户真实IP函数[B/S],欢迎拍砖改进
2006-02-22 15:28 756可以取的真实IP的哦public static string ... -
一个高效判断字符串是否全数字的函数,请大家指正拍砖
2006-02-22 18:50 964看到很多人都采用正则表达式或者一些其它五花八门的算法。经过简单 ... -
多语言Web系统布局的几个小帖士
2006-02-28 14:50 987基于窗体的整体大小使用级联样式表表达式调整元素的大小 ... -
VS2003中自定义控件的智能提示解决方案备忘
2006-02-28 21:26 980这个问题困饶了很久了。一直没有妥善解决。最近从nhiberna ... -
Oracle中隐式游标和显式游标的教训[同事的经历]
2006-02-28 21:34 834一直以为以下这种语句(执行一)就是隐式游标,跟显式定义游标(执 ... -
一个简单的UrlRewrite示例[演示用,写给同事看的,VS2003环境]
2006-03-20 13:07 922UrlDemo.rar下载比较简单。关键点如下:一.Versi ... -
[笔记]1.软件的质量特性characteristics of software quality
2006-05-17 13:14 770外在特性:该软件产品用户所能感受到的部分。包括:正确性可用性效 ... -
[笔记]2.软件质量的一些统计数据
2006-05-17 13:43 1086一个关键事实:提高开发效率和改善质量的最佳途径——减少代码返工 ... -
[笔记]3.软件代码中的BUG问题的一些记录
2006-05-18 08:50 814题记 你越了解你的对手 ... -
[笔记]4.软件规模和开发的关系
2006-05-18 13:47 552前言: 对非软件领域的其他领域[比如化工、船舶等等] ... -
两个读取数据库VIew的定义的SQL语句的写法[Oracle /SQL SERVER]
2006-12-01 18:05 1115例如想读取的VIEW名称 MYVIEW在ORACLE中:SEL ... -
部署Excel相关的应用程序过程中遇到“检索COM类工厂中CLSID...”的两个错误的解决方法
2007-01-29 10:52 2053最近用.net写了一个相关Excel的B/S的程序,部署到20 ... -
VS2005无法调试,绑定句柄无效问题的解决方法
2007-02-02 13:04 1972今天我的VS2005调试时遇到以下两个错误: 1.无法连接到名 ... -
[转]数据库存储过程中利用extproc调用共享程序库/动态链接库,间接可以实现调用操作系统命令
2007-02-09 14:49 12631 数据库程序库主要介绍使用ORACLE数据库的LIBRARY ... -
powerdesigner中生成数据库脚本时出现长度限制问题的解决方法
2007-02-09 16:23 939今天有同事问这个问题,错误显示如下:事实上相关设计的脚本可以在 ... -
[转载整理]一本java书的序言——开发历程思绪随笔
2007-11-26 13:16 757以下文字是一本java书的 ...
相关推荐
与使用NOT IN相比,NOT EXISTS通常能提供更好的性能,因为后者可以提前终止查询,一旦找到匹配项即可停止。 #### 15. 用表连接替换EXISTS 虽然EXISTS在某些场景下性能更佳,但在连接多个表进行复杂查询时,直接...
通常,CBO是更现代且推荐的选项,因为它能更好地适应复杂查询。 2. **访问Table的方式**:考虑使用索引、全表扫描或索引唯一扫描等不同方式。索引能加速数据查找,但维护索引也会消耗额外的存储空间和写操作时间。...
与`EXISTS`相比,`NOT EXISTS`同样可以提供更好的性能,尤其是在大表和复杂查询中。 ##### 3.17 用表连接替换EXISTS 虽然`EXISTS`子查询通常比表连接更高效,但在某些场景下,直接使用表连接可以避免额外的子查询...
- **强制不使用索引**:在某些情况下,为了获得更好的性能,可能需要强制不使用某个索引。 #### 二十七、避免在索引列上使用计算 - **避免计算**:如果在索引列上进行了计算,则可能导致索引失效。 #### 二十八、...
本文档将深入探讨Oracle环境下SQL语句的优化技巧,帮助开发者更好地理解和掌握如何编写高效、高性能的SQL语句。 #### 第2章 SQL语句编写注意问题 本章将详细介绍编写SQL语句时需要注意的问题,特别是针对WHERE子句...
使用`>=`而非`>`可以更好地利用范围索引。 **30. 用UNION替换OR(适用于索引列)** 在索引列上使用`UNION`代替`OR`,可以更有效地利用索引。 **31. 用IN来替换OR** 使用`IN`列表代替多个`OR`条件,可以减少解析成本...
在 Oracle 数据库中,SQL 语句的性能是至关重要的,因为高效的 SQL 查询可以显著提升数据库系统的整体性能。本文将详细讲解几个关键的 Oracle 高效 SQL 规则,包括优化器的选择、访问表的方式以及 SQL 语句的编写...
性能优化是保证Oracle数据库系统高效运行的关键环节,而PL/SQL(Procedural Language/SQL)是Oracle公司提供的过程化SQL语言,它能够更好地控制数据的处理、事务的处理以及程序的流程控制等。 Oracle数据库性能优化...
- **建议**: 大多数情况下,应使用CBO,因为它能够更好地评估查询计划的成本,并选择最优路径。 ##### 3.2 访问Table的方式 - **问题**: 不同的访问方式会导致不同的查询性能。 - **建议**: 了解和选择适当的访问...
根据提供的文件信息,我们可以整理出一系列关于MySQL的基本命令与操作要点。这些命令涵盖了数据库的创建、查询、修改等...对于初学者来说,掌握这些基础命令是非常重要的第一步,可以帮助他们更好地理解和操作数据库。
7. **替换查询操作**:使用EXISTS和NOT EXISTS替代IN和NOT IN,通常能获得更好的性能。 8. **事务管理**:合理设置事务边界,减少事务中的操作次数,提高并发性能。批量处理可以降低事务频率,减轻数据库负担。 综...
此外,为了提高性能和用户体验,我们还可以使用`ContentProvider`、`LiveData`和`Room Persistence Library`等高级特性,它们能更好地管理和异步处理数据库操作,以及与Android系统的其他部分进行集成。 总结来说,...
### 数据库实验指导书知识点梳理 #### 一、教学目的与要求 - **数据库系统的发展**: 数据库...通过上述知识点的梳理和解释,可以帮助学生更好地理解数据库实验指导书中的内容,为进一步的学习和实践打下坚实的基础。
它可以帮助用户更好地理解和使用这些资源。 总的来说,"mysql代码-请假表 ask_leave"涉及到的是数据库设计、SQL脚本编写以及数据管理。理解这些概念和技巧,对于开发和维护一个高效的人力资源管理系统至关重要。在...