OT IN:
select *
from rateparam1.Work_Order_Def a
where workorder_id not in
(select b.workorder_id from rateparam1.work_order_process_log b);
OUTER JOINS:
select * from rateparam1.Work_Order_Def a,rateparam1.work_order_process_log b
where a.workorder_id = b.workorder_id(+)
and b.workorder_id is null;
NOT EXISTS:
select *
from rateparam1.Work_Order_Def a
where not exists (select *
from rateparam1.work_order_process_log b
where a.workorder_id = b.workorder_id)
A表大于B表,查找A>B的部分(A中存在,B中不存在)。
select * from A
where not exists (select * from B
where A.** = B.**
and ...)---B表=A表的部分
NOT IN < OUTER JOIN < NOT EXISTS
在子查询中,NOT IN子句将执行一个内部的排序和合并. 无论在哪种情况下,NOT IN都是最低效的 (因为它对子查询中的表执行了一个全表遍历). 为了避免使用NOT IN ,我们可以把它改写成外连接(Outer Joins)或NOT EXISTS
如果查询语句使用了not in 那么内外表都进行全表扫描,没有用到索引;而not extsts 的子查询依然能用到表上的索引。
通过使用EXIST,Oracle系
统会首先检查主查询,然后运行子查询直到它找到第一个匹配项,这就节省了时间。Oracle系统在执行IN子查询时,首先执行子查询,并将获得的结果列表
存放在在一个加了索引的临时表中。在执行子查询之前,系统先将主查询挂起,待子查询执行完毕,存放在临时表中以后再执行主查询。这也就是使用EXISTS
比使用IN通常查询速度快的原因。
同时应尽可能使用NOT EXISTS来代替NOT IN,尽管二者都使用了NOT(不能使用索引而降低速度),NOT EXISTS要比NOT IN查询效率更高。
用EXISTS替代IN、用NOT EXISTS替代NOT IN:
在许多基于基础表的查询中,为了满足一个条件,往往需要对另一个表进行联接.在这种情况下,
使用EXISTS(或NOT EXISTS)通常将提高查询的效率. 在子查询中,
NOT IN子句将执行一个内部的排序和合并. 无论在哪种情况下,
NOT IN都是最低效的 (因为它对子查询中的表执行了一个全表遍历).
为了避免使用NOT IN ,我们可以把它改写成外连接(Outer Joins)或NOT EXISTS.
例子:
(高效)SELECT * FROM EMP (基础表) WHERE EMPNO > 0 AND EXISTS (SELECT ‘X’
FROM DEPT WHERE DEPT.DEPTNO = EMP.DEPTNO AND LOC = ‘MELB’)
(低效)SELECT * FROM EMP (基础表) WHERE EMPNO > 0 AND DEPTNO IN(SELECT DEPTNO FROM DEPT WHERE LOC = ‘MELB’)
外大内小用in ,外小内大用exists
select count(*)
from A a
where a.tradedate = '20090202'
and a.no in
(select b.no from B b)
如果A表数据量大 而B表数据量小
这样直接过滤了很多数据 不用遍历整张表大表啊
过滤后数据量小了,那么运算次数也少了
select count(*)本来就不会花费很多时间啊,
因为只返回一个记录
但select *
会花费很多时间
那exists效率也会很高,因为exists只返回TRUE或者FALSE
分享到:
相关推荐
为了避免使用NOT IN,我们可以把它改写成外连接(Outer Joins)或NOT EXISTS。使用NOT EXISTS可以提高查询的效率,因为它可以停止遍历表的执行。 EXISTS和NOT EXISTS的应用 在查询中,我们可以使用EXISTS和NOT ...
外连接(Outer Joins) - **LEFT OUTER JOIN**: 返回左表的所有记录以及右表中匹配的记录,如果右表没有匹配则返回NULL。 - 示例:`SELECT a.Name, b.City FROM Employees a LEFT OUTER JOIN Customers b ON a....
- 规定:rules - 在句子"You must not break the rules"中,指的是必须遵守的规定或准则。 - 大厅走廊:hallways - 这个词汇指的是学校或其他公共场所供人们行走的室内通道。 - 运动鞋:sneakers - 用于体育课的...
We live in on-demand, on-command Digital universe with data prolifering by Institutions, Individuals and Machines at a very high rate. This data is categories as "Big Data" due to its sheer Volume, ...
SP-6958 : Preserve whitespace between alias and table name in qualified joins. SP-6963 : No longer flags an ST007 issue if the reused cursor name has been previously deallocated. See the full release ...
- **右连接(RIGHT JOIN)**:与左连接相反。 - 示例:`SELECT * FROM 表1 RIGHT JOIN 表2 ON 表1.关联列 = 表2.关联列;` - **全连接(FULL JOIN)**:返回左表和右表中的所有行。 - 示例:`SELECT * FROM 表1 ...
- DBIx::Class 提供了一个灵活的架构,允许开发者定义自己的数据库模式,每个模式对应一个数据库表,每个表中的记录映射为类的实例。 2. **数据库模式设计** - 在 DBIx::Class 中,模式(Schema)是所有数据库表...
SQL Joins Visualizer帮助您使用维恩图在两个表之间构建SQL JOIN。 发展历程 。 Web应用程序基于构建。 要以开发模式启动它,需要安装ruby并在终端中运行: $ bundle # get all deps $ middleman server # start ...
MySQL是世界上最受欢迎的关系型数据库管理系统之一,广泛应用于各种规模的企业和项目中。为了在面试中脱颖而出,理解并掌握MySQL的核心概念和技术是至关重要的。以下是一些关于MySQL面试的关键知识点: 1. **数据库...
不要为在Slack中寻求帮助而害羞。 :red_exclamation_mark: :red_exclamation_mark: :red_exclamation_mark: 注意 :red_exclamation_mark: :red_exclamation_mark: :red_exclamation_mark: -有些人开始任性分配...
流连接 有序 objectMode 流的连接操作(例如时间序列数据)。 将两个时间序列流连接成单个流的各种类型的连接操作。... gen ( { start : 0 , until : 5000 , interval : 1000 , key : "L" } ) , gen ( { start : 500
对象持久化是将内存中的对象状态保存到持久存储介质(如数据库)中,以便在后续的程序运行中可以恢复这些对象的状态。它解决了应用程序中的数据管理问题,使得业务逻辑与数据存储分离,提高了代码的可复用性和可维护...
- Jobentries: 当前作业中应用的作业组件列表。 通过以上知识点的详细解释,我们可以看到Kettle作为一款强大的开源ETL工具,在数据集成领域发挥着重要作用。无论是对于初学者还是有一定经验的用户,了解和掌握这些...
- 关联与连接:Jet SQL支持INNER JOIN, LEFT JOIN, RIGHT JOIN和FULL OUTER JOIN,用于合并多个表的数据。 4. **Jet SQL与VBA的结合** - 在VBA(Visual Basic for Applications)中,可以使用DAO(Data Access ...
这将为您创建并填充数据库,并使用nodemon启动服务器。 从...开始: 作为用户,我希望看到一个子宫列表,以便我知道谁该要求清理温布尔登公共事务。 作为用户,我想访问显示其特征的单个子宫的view路线,以便能在...
在深入研究这个项目源代码("scalacheck-and-joins-master")时,我们可以发现具体的实现细节,例如如何构建和配置Slick数据模型,如何定义和生成测试用例,以及如何定义和执行查询。通过分析这些代码,开发者可以...
**Dancer-Plugin-Database** 是一个专门为 **Dancer** 应用程序设计的数据库插件,它提供了方便且简洁的数据库支持。Dancer 是一个轻量级的、基于Perl的Web框架,它允许开发者快速地构建Web应用程序,而Dancer-...
lodash-joins 内容 左反连接 左外连接 左半连接 未来 关于 一个提供JavaScript数组连接算法的库。 LoDash是唯一的依赖项,并且此库将自身附加为该库的扩展。 Lodash已经支持一些类似于SQL的标准功能: _.pluck ...
- 如果员工表与部门表有一个名为 `depart_id` 的共同列,则此查询将基于该列进行连接。 - 示例:`FROM employee JOIN department USING (depart_id);` - 明确指定了连接依据为 `depart_id`。 - 示例:`FROM ...