项目中遇到个超级长的sql。拷贝出来,用java 程序判断了下.总计字符长度
3464.里里外外的看的头晕.用oracle监测工具这里消耗时间特长.需要优化.
看了半天,牵涉业务逻辑,还是先改简单的吧.用exists 和not exists 替代in not in 。
A:
select uu.user_id
from tab_uum_users uu
where uu.company_id in
(select u.company_id from tab_uum_users u where u.user_id =21800001900)
and uu.user_id not in (21800001900)
改成
B:
select a.user_id
from tab_uum_users a
where exists (select u.company_id
from tab_uum_users u
where u.user_id = 21800001900
and a.company_id = u.company_id)
and not exists (select uuu.user_id
from tab_uum_users uuu
where a.user_id = uuu.user_id
and uuu.user_id = 21800001900)
在表 tab_uum_users记录23933条的情况下.
开始执行时间B比A快0.01
后续A和B几乎一样0.14秒左右.貌似没看出效果么.
分享到:
相关推荐
SQL语句优化之用EXISTS替代IN、用NOT EXISTS替代NOT IN的语句 SQL语句优化是数据库性能优化的重要方面之一。在许多基于基础表的查询中,为了满足一个条件,往往需要对另一个表进行联接。在这种情况下,使用EXISTS...
本文将深入探讨 SQL 中 `EXISTS`, `NOT EXISTS`, `IN`, `NOT IN` 的使用场景及效率问题。 #### 一、Exists 和 Not Exists 的效率说明 **Exists** 和 **Not Exists** 子句通常用于检查子查询是否返回任何行,它们...
在SQL查询中,`EXISTS`和`NOT EXISTS`是两个非常重要的子查询操作符,它们主要用于判断子查询是否返回结果。本篇文章将详细介绍这两个关键字的用法,并通过实例进行解析。 首先,`EXISTS`的语法是:主查询中的条件...
对于`IN`和`NOT IN`,应尽可能使用`JOIN`、`EXISTS`或结合空值判断的替代方法,以充分利用索引并减少不必要的计算步骤,从而提高查询速度和系统整体性能。在编写SQL时,不仅要考虑语句的可读性和简洁性,还要兼顾...
- 如果使用 `EXISTS` 的目的是为了过滤结果集,考虑使用 `IN` 或 `JOIN` 作为替代方案。 - 在涉及多层嵌套的情况下,仔细分析查询逻辑,尝试简化结构以提高可读性和执行效率。 - 使用 `EXISTS` 代替 `IN` 可能会在...
在SQL查询中,`IN`、`EXISTS`、`NOT IN`以及`NOT EXISTS`是四个常用的比较和过滤操作符。它们在处理数据时有不同的效率和适用场景,特别是涉及到大数据量时,优化这些操作符的使用对于提升数据库查询性能至关重要。 ...
用NOT EXISTS替代NOT IN可以提高执行效率。 13. 用EXISTS替换DISTINCT,如: 在编写SQL语句时,用EXISTS替换DISTINCT可以提高执行效率。 14. 识别'低效执行'的SQL语句 在编写SQL语句时,识别'低效执行'的SQL语句...
根据提供的信息,我们可以了解到这个问题是关于如何在SQL Server 2000中处理一组具有相互替代关系的数据,并将其重新组织成新的结构。具体来说,原始数据由一系列的两列组成,其中每一行的第一个元素(c1)可以被第...
MySQL中的`EXISTS`和`IN`都是在SQL查询中用来检查某条记录是否符合特定条件的子查询操作符,但它们的工作原理和使用场景有所不同。 `EXISTS`子查询主要检查子查询是否能返回至少一行数据。在这个过程中,子查询的...
这篇文章由于思江所撰写,主要探讨了如何利用Count聚合函数作为SQL中量词的替代方法,以解决使用Exists量词带来的复杂性和理解难度。 首先,存在量词Exists在SQL中的应用非常广泛,它用于检查子查询是否返回至少一...
例如,用`NOT EXISTS`替代`NOT IN`通常被视为更好的实践,但实际上两者在执行效率上可能并无显著差异,这取决于具体环境。 6. `EXISTS`与`IN`:在许多情况下,`EXISTS`和`IN`的执行效率相当。它们都是通过子查询来...
在SQL语言中,`IF NOT EXISTS` 和 `IF EXISTS` 是两种条件判断语句,用于在执行DML(数据操纵语言)或DDL(数据定义语言)操作前进行条件检查,以确保操作的安全性和有效性。这两种关键字主要应用于避免重复的数据...
- `EXISTS` 和 `NOT EXISTS` 子查询仅需要找到一条满足条件的记录即返回结果,而 `IN` 和 `NOT IN` 需要遍历整个子查询的结果集。 - 当子查询结果集很大时,`EXISTS` 和 `NOT EXISTS` 的效率更高。 - **示例**: ...
=或、IS NULL或IS NOT NULL、IN和NOT IN等操作符,这些会导致索引失效。若必须使用,考虑使用EXISTS或NOT EXISTS子句替代,如在查找子表中不存在于主表的记录时,使用EXISTS通常比NOT IN更高效。 在字段设计上,应...
15. **用EXISTS替代IN、用NOT EXISTS替代NOT IN**:EXISTS和NOT EXISTS通常比IN和NOT IN更高效,因为它们只关心是否存在匹配,不关心具体值。 16. **识别‘低效执行’的SQL语句**:通过SQL性能分析工具监控和识别...
8. **用NOT EXISTS替换NOT IN**:在否定子查询中,NOT EXISTS通常比NOT IN快,因为NOT EXISTS只需检查是否存在匹配项,而NOT IN可能需要遍历整个子查询结果。 这些技巧可以帮助数据库管理员和开发人员优化Oracle ...
用NOT EXISTS替代NOT IN也是同样的道理,NOT EXISTS会在找到第一个不匹配的行后立即停止,而NOT IN则会遍历整个列表。 在适当情况下,用表连接替换EXISTS可以利用连接操作的并行性提高效率,但需谨慎,因为大型表的...
最后,需要注意常用关键字优先级,使用EXISTS替代IN,使用NOT EXISTS替代NOT IN,使用表连接替换EXISTS,使用 EXISTS替换DISTINCT,避免在索引列上使用IS NULL和IS NOT NULL等。 SQL性能调优是一项非常重要的技术,...