`

minus/not in/not exists的原理和效率

阅读更多

http://www.itpub.net/viewthread.php?tid=984425&extra=&page=3

minus:

CODE:
Select *
From gal_voucher_item item
Where item_iid In (Select item_iid
                                  From gal_voucher_item
                                  Minus
                                 Select item_iid From gal_voucher_item_detail);


时间:4.438/4.39 s

not in:

Select *
From gal_voucher_item  item
Where Not Exists (Select /*+ hash_aj */ 1 From gal_voucher_item_detail detail Where item.item_iid = detail.item_iid);

时间:比上面MIUNUS快多了。

not in:

CODE:
Select * From gal_voucher_item Where item_iid Not In (Select item_iid From gal_voucher_item_detail);


时间:没跑出来

not exists:

CODE:
Select *
From gal_voucher_item item
Where Not Exists (Select 1 From gal_voucher_item_detail detail Where item.item_iid = detail.item_iid);


时间:没跑出来

分享到:
评论
3 楼 UniverseSae 2011-01-01  
331008019 写道
可以考虑用这种查询方式:
Select a.*  From gal_voucher_item a, gal_voucher_item_detail b  where a.item_iid = b.item_iid(+)    and b.item_iid is null;

怎么我觉得应该是is not null?
2 楼 心似海 2010-07-28  
331008019 写道
可以考虑用这种查询方式:
Select a.*  From gal_voucher_item a, gal_voucher_item_detail b  where a.item_iid = b.item_iid(+)    and b.item_iid is null;


谢谢楼上的高手,
1 楼 331008019 2010-07-22  
可以考虑用这种查询方式:
Select a.*  From gal_voucher_item a, gal_voucher_item_detail b  where a.item_iid = b.item_iid(+)    and b.item_iid is null;

相关推荐

    Oracle: minus | in | exists

    在Oracle数据库中,`MINUS`、`IN` 和 `EXISTS` 是三种不同的SQL查询操作符,它们各自用于特定的数据处理场景。了解并熟练掌握这些操作符对于优化查询性能和编写复杂的SQL语句至关重要。 1. **MINUS 操作符** `MINUS...

    MySQL中对于not in和minus使用的优化

    在MySQL数据库中,`NOT IN` 和 `MINUS` 是两种常用的子查询操作,用于从结果集中排除特定的行。然而,这些操作在某些情况下可能会导致性能问题,特别是在处理大量数据时。本篇文章将探讨如何对这两种操作进行优化,...

    oracl数据库查询优化[定义].pdf

    6. **MINUS子句和NOT IN**:MINUS子句通常比NOT IN更快,但需注意,NOT IN和NOT EXISTS在处理NULL值时有所不同,NOT EXISTS在某些情况下可能更快,因为它可以使用索引。 7. **LIKE操作符的效率**:`LIKE`操作符,...

    oracle部分面试题-DBA数据库管理员JAVA程序员架构师必看 (3).docx

    SELECT id, name FROM emp1 e WHERE e.id NOT IN (SELECT id FROM sext); ``` 2. 使用MINUS操作符: ```sql SELECT id FROM emp1 MINUS SELECT id FROM sext; ``` 3. 使用<> ALL子查询: ```sql SELECT * ...

    oracle性能问题总结

    - **避免使用Not In**:Not Exists通常优于Not In。 - **避免使用DISTINCT**:在一对多查询时,应避免在SELECT中使用DISTINCT,可以考虑使用EXIST替换。 - **避免计算索引列**:索引列不应参与计算,避免IS NULL...

    Oracle Database 11g SQL Fundamentals 英文原版

    3. 子查询:理解嵌套查询的概念,掌握IN、NOT IN、EXISTS、NOT EXISTS等子查询用法。 4. 分区和索引:了解Oracle的分区技术,如何提高查询性能,以及索引的创建、管理和使用。 5. 视图:创建和使用视图以简化复杂...

    数据库原理第11讲.ppt

    虽然标准SQL未直接提供`MINUS`操作,但可以通过`NOT EXISTS`子句或`LEFT JOIN`实现类似功能。 举例来说,如果要找出选修了课程1但未选修课程2的学生,可以使用以下查询: ```sql SELECT Sno FROM SC WHERE Cno ...

    oracle部分面试题-DBA数据库管理员JAVA程序员架构师必看.pdf

    6. 使用`NOT IN`和子查询: ```sql SELECT * FROM emp1 WHERE id NOT IN (SELECT emp1.id FROM emp1, sext WHERE emp1.id = sext.id); ``` 类似于第一种方法,但是通过子查询进行过滤。 7. 使用`INTERSECT`操作...

    sql优化心得

    - 方法a:`SELECT * FROM A WHERE A.C NOT IN (SELECT C FROM B)`可能效率较低。 - 方法b:`SELECT A.* FROM A, B WHERE A.C = B.C (+) AND B.C IS NULL`使用外连接,但注意性能问题。 - 方法c:`SELECT * FROM A...

    数据库系统概论第12周学习攻略

    - 使用EXISTS/NOT EXISTS可以实现全称量词的逻辑。这通常涉及到复杂的逻辑判断和数据处理流程。 #### 二、带有比较运算符的子查询 1. **基本用法** - 当内部查询能够确定返回单个值时,可以直接使用比较运算符...

    Oracle和SQL_Server的语法区别

    - Oracle 支持 `INTERSECT` 和 `MINUS` 集合运算符,而 SQL Server 用 `EXISTS` 和 `NOT EXISTS` 子句来实现相同的效果。 对于示例中的 `INTERSECT` 和 `MINUS` 运算符,可以使用 `EXISTS` 或 `NOT EXISTS` 来达到...

    SQL面试题目.pdf

    此题使用自连接和集合操作(如`MINUS`或`EXCEPT`,在某些数据库系统中可能为`NOT EXISTS`)找出这些学生。 以上就是基于题目内容的SQL知识点解析,涵盖了子查询、JOIN操作、聚合函数、条件过滤、集合操作等核心概念...

    oracle优化方法

    NOT EXISTS也比NOT IN更高效,原因与EXISTS类似。 #### 18. EXISTS与DISTINCT 在某些情况下,使用EXISTS代替DISTINCT可以提高性能。 #### 19. SQL语句的编写技巧 编写高效的SQL语句需要注意多方面的细节,如避免...

    SQL语言在透视表中的应用

    嵌套查询部分将展示如何通过不同的SQL子句来提取复杂的数据集,例如通过〔in〕、〔any〕、〔some〕、〔all〕、〔exists〕、〔union〕、〔intersect〕和〔minus〕等关键字。多表查询(关联查询)将强调如何基于特定...

    SQL查询效率注意事项小结

    6. **子查询优化**:合理使用`IN`、`NOT IN`、`EXISTS`和`NOT EXISTS`。当子查询结果无重复时,`IN`和`EXISTS`可以互换;当保证子查询结果非空时,`NOT IN`和`NOT EXISTS`可用`LEFT JOIN`替代。尽量避免不必要的子...

    Oracle性能问题总结

    Oracle 的 From 子句表的顺序,Where 子句表达式的顺序,避免使用 ‘*’,使用 Truncate 代替 Delete,使用索引尽量减少对表的查询,避免使用右匹配或者中间匹配的模糊查询,并注意使用 exists、NOT EXISTS、NOT IN ...

    SQL编程规范(还不错哦)

    1. 尽量少用嵌套查询,使用 not exist 代替 not in 子句。 2. 用多表连接代替 EXISTS 子句。 3. 少用 DISTINCT,用 EXISTS 代替。 4. 使用 UNION ALL、MINUS、INTERSECT 提高性能。 5. 使用 ROWID 提高检索速度。 6....

    oracle sql调优原则

    - **IN/NOT IN操作符优化**:在业务密集的SQL中尽量避免使用`IN`和`NOT IN`操作符,可以使用`EXISTS`或`NOT EXISTS`来代替,以提高性能。同时,如果使用`IN`操作符,应将出现频率最高的值放在列表的前面。 - **IS ...

    oracle部分面试题-DBA数据库管理员JAVA程序员架构师必看.docx

    1. 子查询和集合操作:`IN`, `NOT IN`, `MINUS`, `ALL`, `EXISTS`, `INTERSECT`。 2. `JOIN`操作:`LEFT JOIN`, `INNER JOIN`,以及如何使用连接条件。 3. 聚合函数:`COUNT`, `SUM`,以及`GROUP BY`语句。 4. 计算...

    oracle函数详解[收集].pdf

    在描述中提到的符号和操作符,例如`+`、`-`、`*`、`/`用于基本的数学运算,`IS NULL`和`IS NOT NULL`用于检查值是否存在,`BETWEEN`、`NOT BETWEEN`用于区间判断,`IN`、`NOT IN`、`ANY`、`SOME`、`ALL`用于集合比较...

Global site tag (gtag.js) - Google Analytics