首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

OB 运维 | 一个关于 NOT IN 查询 SQL 优化案例

数据库版本:OceanBase 3.2.3.3 1问题描述 前段时间碰到一个SQL,NOT IN 查询被优化器改写成了 NESTED-LOOP ANTI JOIN,但是被驱动表全表扫描无法使用索引...true),这种反连接能够处理 NULL 值,Oracle 称其为 Null-Aware Anti Join(真实执行计划显示为 XX ANTI NA)。...怎么实现?因为它实现方式导致了对被驱动表只能全表扫描不能走索引? 从结果来看,OB NESTED-LOOP ANTI JOIN 查询结果正确,能处理 NULL 敏感。...加 /*+ no_rewrite */ 执行计划,执行耗时 7 秒,比原始 SQL 耗时 16 秒快,从执行逻辑来看: 这里是非相关子查询,每次重复执行结果都是一样,所以执行一次后保存在参数集合...从参数拿到右边非相关子查询结果,下推 FILTER 到左边计划,执行父查询,注意看条件是 A.AGENT_ID!= ALL(subquery(1)),这里是 !

10110
您找到你想要的搜索结果了吗?
是的
没有找到

InnoDBSQL查询关键功能和优化策略

前言通过上篇文章《MySQL体系结构与SQL执行流程》了解了SQL语句执行流程以及MySQL体系结构「连接器」、「SQL接口」、「解析器」、「优化器」、「执行器」功能以及整个流程作用。...MySQL体系结构,存储引擎是负责和磁盘交互,当执行一条SQL语句,最终是通过存储引擎获取结果,不论是查询语句、插入语句还是更新语句,所以存储引擎是用来查询、存储、管理数据。...接下来看一下InnoDB存储引擎接收到「执行器」调用请求后做了什么事吧。InnoDB查询操作通过结构图可以看到InnoDB存储引擎有两部分内容,一个是内存结构,另一个是物理结构。...很显然,当InnoDB收到一个查询SQL请求后会有两个操作:先去内存查找有没有符合条件数据,有,直接将数据返回给执行器。...我们还可以通过观察Buffer Pool情况从而进行调整。正在参与2024腾讯技术创作特训营第五期有奖征文,快来和我瓜分大奖!

48075

一条查询SQLMySQL是怎么执行

平时我们使用数据库,看到通常是一个整体,比如我们执行一条查询SQL,返回一个结果集,却不知道这条语句MySQL内部是如何执行,接下来我们就来简单拆解一下MySQL,看看MySQL是由哪些“零件...这样我们以后遇到MySQL一些异常或者问题时候,就可以快速定位问题并解决问题。 下边通过一张图来看一下SQL执行流程,从中可以清楚看到SQL语句MySQL各个功能模块执行过程。 ?...分析器 接着上面一步,如果没有命中查询缓存,就开始真的执行语句了,首先MySQL需要知道你要做什么,会对SQL语句进行解析。...优化器 经过了分析器,MySQL就知道你要做什么了,执行之前,还要经过优化器处理。 优化器是表里有多个索引时候,决定使用哪个索引;或者一个语句中有多表关联时候,决定各个表连接顺序。...在数据库查询日志可以看到一个rows_examined字段,表示这个语句执行过程扫描了多少行,这个值是执行器每次调用引擎时候累加,有时候执行器调用一次,引擎内部扫描了多行,隐藏引擎扫描行数跟

4.8K20

SSH框架通用原生SQL查询基类支持,方便进行双orm操作

查询基类 */ public class BaseGeneralQuery extends AbstractHibernateDAOImpl { /** 通用SQL查询方法(返回多条记录) SQL...:SQL语句,切记必须指定查询字段,不可使用通配 * sqlType:SQL(原生SQL)、HQL(HQL语句) List对应每一条记录,Mapput对应一个字段、值。...SQL语句,应规范SQL语句,HQL最好兼容SQL写法. 解析Map时候,需要通过查询字段对应下标获取,从0开始。...或者是HQL语句查询字段复杂性和规范性,无法进行有效截取判断。...) ["+e.getMessage()+"] "); } return map; } /** 通用SQL查询方法(返回单个字段数据) field: 单个查询语句字段aa SQLSQL语句(select

85030

SQL优化之一则MySQLDELETE、UPDATE 查询锁机制失效案例

UPDATE、DELETE 查询条件下优化器实现导致查询行锁机制失效,行锁升级,对更多无关行数据加锁,进而影响数据库并发和性能 。...一、UPDATE、DELETE 查询锁机制失效解析及优化方案 下面以普通 UPDATE 关联查询更新来详解查询对锁机制影响及具体优化解决方案: 查询事务、锁机制分析: 优化器实现: UPDATE...,inner join 联表情况下,只对需更新数据行加索,并发性能最高;exitsts 查询 delete 与 update 操作下,均为全索引扫描,并发最差;in 查询 update 操作下与...,锁住了表数据行,阻碍了对表 delete,update 操作,却不妨碍 insert 并发操作,MySQL 5.6 之后优化器对 not in 查询做了相关优化工作,检索效率高于 not exists...MySQL 优化器以及 InnoDB 行锁机制特性,增加了 UPDATE、DELETE 下子查询复杂度, MySQL 数据库程序开发数据库维护过程,真正了解优化器实现和 InnoDB 行锁机制行为

2.3K40

一个千万级数据库查寻,如何提高查询效率?

一个千万级数据库查寻,如何提高查询效率? 1、数据库设计方面: A. 对查询进行优化,应尽量避免全表扫描,首先应考虑 where 及 order by 涉及列上建立索引。 B....0,确保num列没有null值,然后这样查询: select id from t where num=0 C....并不是所有索引对查询都有效,SQL是根据表数据来进行查询优化,当索引列有大量数据重复时,查询可能不会去利用索引,如一表中有字段sex,male、female几乎各一半,那么即使sex上建了索引也对查询效率起不了作用...;具有一个以上处理器机器上运行SQL。...因为人们 使用SQL时往往会陷入一个误区,即太关注于所得结果是否正确,特别是对数据量不是特别大数据库操作时,是否建立索引和使用索引好坏对程序响应速度并不大,因此程序员书写程序时就忽略了不同实现方法之间可能存在性能差异

1.4K30

一个千万级数据库查寻,如何提高查询效率?

可以num上设置默认值0,确保num列没有null值,然后这样查询: selectidfromtwherenum=0; 3、并不是所有索引对查询都有效,SQL是根据表数据来进行查询优化,当索引列有大量数据重复时...这是因为引擎处理查询和连接时会逐个比较字符串一个字符,而对于数字型而言只需要比较一次就够了; 7、尽可能使用 varchar/nvarchar 代替 char/nchar ,因为首先变长字段存储空间小...9、不要写一些没有意义查询,如需要生成一个空表结构: select col1,col2 into #t from t where 1=0 这类代码不会返回任何结果集,但是会消耗系统资源,应改成这样:...;具有一个以上处理器机器上运行SQL。...因为人们使用SQL时往往会陷入一个误区,即太关注于所得结果是否正确,特别是对数据量不是特别大数据库操作时,是否建立索引和使用索引好坏对程序响应速度并不大,因此程序员书写程序时就忽略了不同实现方法之间可能存在性能差异

1.6K20

9.1.MySQL实践@一个千万级数据库查寻,如何提高查询效率

0,确保num列没有null值,然后这样查询: select id from t where num=0         c....并不是所有索引对查询都有效,SQL是根据表数据来进行查询优化,当索引列有大量数据重复时,查询可能不会去利用索引,如一表中有字段sex,male、female几乎各一半,那么即使sex上建了索引也对查询效率起不了作用...这是因为引擎处理查询和连接时会逐个比较字符串一个字符,而对于数字型而言只需要比较一次就够了。         g....;具有一个以上处理器机器上运行SQL。...因为人们使用SQL时往往会陷入一个误区,即太关注于所得结果是否正确,特别是对数据量不是特别大数据库操作时,是否建立索引和使用索引好坏对程序响应速度并不大,因此程序员书写程序时就忽略了不同实现方法之间可能存在性能差异

1.7K40

jpa : criteria 作排除过滤、条件除去查出部分数据、JPA 一个参数可查询多个字段

PS : mybatis 也有对于 criteria 使用,见另一文章:mybatis :Criteria 查询、条件过滤用法 1. 业务场景: (1) ....按业务条件查到所有数据后,要过滤掉其中 “当前领导自己填报但不由自己审批数据” ,本来一直在想是不是会有和 sql 类似于 except 效果实现 ,就一直想找这个方法,但没有点出这个方法来,...直到源码中看到一个 not 方法 。...微信端要求一个输入框实现多种类型数据查询。可输入“姓名、项目名称、工作任务、工作类型” 任意一种,并作相应条件过滤。...这种只给一个参数却可能代表多种类型数据实现 如下: Predicate p = cb.or(cb.like(root.get("employeeName"), "%" + search + "%"

2.4K20

【数据库设计和SQL基础语法】--连接与联接--多表查询查询基础(二)

查询 SQL 查询语言中应用非常灵活,可以根据具体业务需求和数据结构进行定制。...使用查询进行条件过滤好处在于,它提供了一种灵活方式来根据其他查询结果动态地确定主查询条件。 2.2 查询与连接结合运用 查询与连接结合可以帮助复杂数据关系检索所需信息。...2.3 查询多表查询嵌套应用 多表查询查询嵌套应用可以帮助解决更为复杂数据检索问题。...查询 WHERE 子句中使用查询来过滤结果。 五、常见问题与解决方案 5.1 多表查询常见错误 进行多表查询时,有一些常见错误可能会影响查询正确性或性能。...; 解决方法: 确保 JOIN 操作中指定正确连接条件,以避免不相关行被关联。

26910

【数据库设计和SQL基础语法】--连接与联接--联接优化与性能问题

优化器需要花费更多时间来生成有效执行计划。 查询和嵌套查询查询或嵌套查询使用可能增加联接操作复杂性。 优化器需要处理嵌套查询,并确保查询结果正确地集成到主查询。...2.2 确保正确索引 确保正确索引是 SQL 联接优化关键因素之一。适当索引可以大大提高联接操作性能。...解决方案: 审查查询确保所有联接都有正确条件,并避免无关笛卡尔积。 大表性能问题: 问题描述: 联接涉及到一个非常大表,导致查询性能下降。...通过针对性地采取优化措施,可以显著提升 SQL 联接操作性能。 3.2 优化策略实际应用 实际应用SQL联接优化策略需要根据具体场景和需求进行调整。...使用视图简化查询: 场景: 一个企业管理系统,需要联接多个表以获取员工详细信息。 应用: 创建一个视图,将员工相关信息聚合在一起,然后查询引用该视图,简化复杂联接结构。

18210

T-SQL进阶:超越基础 Level 2:编写查询

“超越基础”楼梯这个层次上,将讨论一个查询不同方面,将来一个层面上,将讨论相关查询。 什么是查询查询只是一个SELECT语句,它包含在另一个Transact-SQL语句中。...此外,查询甚至可以FROM子句或关键字EXISTS中使用时返回多个列和值。 查询容易Transact-SQL语句中发现,因为它将是括号SELECT语句。...清单10代码使用一个查询来计算要插入列MaxOrderDate值。...要将使用查询查询性能与不使用查询等效查询进行比较,将在清单3重写查询以使用JOIN操作。 清单11显示了重写JOIN查询,相当于清单3查询。...查询帮助您构建更复杂Transact-SQL语句以满足业务需求强大工具。 问题和答案 本节,您可以通过回答以下问题来查看您使用查询概念了解内容。

6K10
领券