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

为什么Oracle相似查询会生成截然不同的解释计划

Oracle相似查询会生成截然不同的解释计划的原因是由于Oracle数据库的查询优化器在生成查询计划时,会根据查询语句的具体结构、表的统计信息、索引情况等多个因素进行综合考虑和评估,从而选择最优的执行路径。

具体来说,以下是可能导致相似查询生成不同解释计划的几个常见因素:

  1. 查询语句的写法:即使两个查询语句在逻辑上是相似的,但是它们的具体写法可能不同,例如使用不同的连接方式(INNER JOIN、LEFT JOIN等)、不同的子查询嵌套方式等。这些细微的差别可能会导致优化器选择不同的执行路径。
  2. 表的统计信息:Oracle数据库会收集表的统计信息,包括表的大小、行数、列的分布情况等。这些统计信息对于优化器选择执行路径非常重要。如果两个相似查询的表的统计信息不同,那么优化器可能会根据不同的统计信息做出不同的选择。
  3. 索引情况:索引在查询性能优化中起着重要的作用。如果两个相似查询的表上存在不同的索引,那么优化器可能会根据索引的选择性、列的顺序等因素做出不同的选择。
  4. 数据库参数设置:Oracle数据库有许多参数可以配置,这些参数的设置也会影响查询的执行计划。例如,查询优化器模式、查询优化器参数等都可能会对查询计划产生影响。

综上所述,Oracle相似查询生成截然不同的解释计划是由于查询语句的具体写法、表的统计信息、索引情况以及数据库参数设置等多个因素综合影响的结果。为了获得更好的查询性能,可以通过优化查询语句的写法、收集和更新表的统计信息、优化索引设计以及调整数据库参数等方式来改善查询的执行计划。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

一学就会获取SQL执行计划和性能统计信息方法

解释 1 SET AUTOTRACE ON 打开Autotrace,输出SQL查询结果和执行计划,以及性能统计 2 SET AUTOTRACE ON EXPLAIN 打开Autotrace,输出SQL...查询结果和执行计划,但不输出性能统计 3 SETAUTOTRACE TRACEONLY 打开Autotrace,输出执行计划和性能统计,但不输出SQL查询结果 4 SET AUTOTRACE TRACEONLY...STATISTICS 打开Autotrace,仅输出性能统计,但不输出SQL查询结果和执行计划 5 SET AUTOTRACE OFF 此为默认值,即关闭Autotrace AUTOTRACE使用例...②:SQL执行计划哈希值,用于标识不同执行计划 ③:SQL执行计划内容 项目 解释 Id 各步骤序号,注:非执行顺序 Operation 操作内容 Name 操作对象 Rows 操作行数 Bytes...SQL数量;执行SQL语句时生成内部SQL语句,称为递归调用。

81210

数据库库信息速递:MySQL HeatWave 引入AI 功能 (译)

Oracle在年度CloudWorld大会上宣布,在数据分析云服务MySQL HeatWave增加Vector Store和新生成式AI功能。...“对于给定用户查询,Vector Store通过在存储嵌入和嵌入查询之间执行相似性搜索,识别出最相似的文件,”Oracle一位发言人说道。...通过执行相似性搜索,它可以识别出与给定查询相似的文件。...正如其名称所示,自适应查询执行帮助企业优化查询执行计划,通过使用从查询部分执行中获取信息来调整数据结构和系统资源,从而提高性能。...另外,自动加载和卸载通过自动加载正在使用列到HeatWave中,以及卸载从未被使用列来提高性能。“此功能自动卸载从未或很少被查询表。

19010

一次性能突发情况紧急修复(r9笔记第18天)

从电话里反馈得知,他们在做业务数迁移,会把数据库1中数据迁移到数据库2中,当然根据逻辑要求迁移大部分数据。基于这种逻辑复杂性,所以这次 迁移时由开发同学来主导,我们来负责支持。...当然为什么insert会卡顿,主要原因还是在于insert语句是子查询形式,根本还是在于 select问题。经过一番分析,这样语句有2个。...,但是开发再次执行查询问题还是依旧。...对于这个问题,我抓紧使用Tuning包收集了一个报告,Oracle给出建议是调整一些索引,调整执行计划等,这些索引可以按照建议方式去加,但是 风险不可控,很可能添加了索引之后,其它相关语句执行计划随着影响...而这类问题我们需要跟进一步,来探索一下为什么同样表结构,基本一致数据为什么产生截然不同SQL语句,我相信结局一定让人唏嘘感叹。

58250

Oracle-Soft ParseHard ParseSoft Soft Parse解读

当发布一条DML SQL或PL/SQL命令时,Oracle自动寻找该命令是否存在于共享池中来决定对当前语句使用硬解析或软解析。...那么为什么Oracle需要再次对语句文本进行检测呢?不是SQL语句HASH值已经对应上了?事实上就算是SQL语句HASH值已经对应上了,并不能说明这两条SQL语句就已经可以共享了。...尽管查询表对象使用了大小写,但Oracle为其生成了不同执行计划  select * from emp;  select * from Emp;  select * from EMP;   2....类似的情况,下面的查询中,尽管其where子句empno值不同,Oracle同样为其生成了不同执行计划  select * from emp where empno=7369   select *...,生成不同执行计划 ---- 硬解析弊端 硬解析即整个SQL语句执行需要完完全全解析,生成执行计划

2.2K20

MYSQL 中查询技巧 与 MYSQL 8 并行查询

最近公司系统一点点开始了拆分,从ORACLE 转移到 MYSQL 中,部分程序员想法在使用MYSQL中还是没有转变过来,直接将ORALCE中查询语句直接搬到了MYSQL。...下图是以 mysql 8.015 这个版本作为语句执行基础 其实两条语句查询结果是一样,仅仅是写法不一样,给出执行计划就是不一样 以目前最新版本MYSQL来说,从上面的例子里面,还是要鼓励直接查询...3 时间范围对选择索引影响 下面两条语句对于索引选择截然不同,我们建立四个索引 Select * from employees where first_name ='Georgi' or last_name...最后,我们看看MYSQL 8.0并行查询,并行查询,其实在 PG, SQL SERVER , ORACLE 中都有,但形式不同,MYSQL 8 之前是没有并行查询这个概念,MYSQL 8 引入了并行查询...如果你经常观察MYSQL 和 POSTGRESQL ,你就会感到开源数据库越来越强大,留给ORACLE 和 SQL SERVER 这样数据库时间其实不多了。 ?

8K60

一次由查询转换引起性能问题分析

这个是因为Oracle 版本升级解决了老版本优化器一些限制典型案例。这种新功能增加往往带来隐含参数增加。...我们可以利用提示(Hint)关闭这个参数,看看产生什么结果。 ? 可以看到,关闭相应隐含参数时候,执行计划回到了Oracle 10g时候样子,即没有进行连接条件谓词推入。...可以看到,Oracle 11g里比Oracle 10g 使用了更多查询转换。Oracle每次版本更新都会带来查询转换领域不断更新。...我们看了几个在查询转换(Query Transformation)中非常典型连接谓词推入例子。希望在实践中不断进行尝试,来加深对查询转换理解。优化过程中,经常会问自己为什么不选择索引呢?...今后,希望再加上两个问题问自己,为什么不进行谓词推入呢?为什么不进行视图合并呢?对查询转换认识越深,对执行计划理解也变得越来越深,对SQL优化也变得加更体系化。 ?

1.1K50

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

判断直接原因 从执行计划、表结构和数据量来看,这个 SQL 效率低有两个原因: 关联字段 AGENT_ID 有索引,但对被驱动表做查询时却使用全表扫描,效率必定低。为什么不走索引?...对比 Oracle 执行计划 Tips:当 OB 上看到执行计划不符合预期,但又找不到原因时,可以对比 Oracle 执行计划。...小结 到这里我们能解释一个问题:为什么 OB 不能使用 HASH ANTI JOIN ?...NOT IN、NOT EXISTS 子查询和 WHERE t1.a!=t2.a 看起来相似,但其实语义是不一样,下面例子可以说明。...4.x 实现 NESTED-LOOP ANTI JOIN NA,实现方式就是我们前面推理出逻辑,也就是说 3.x 用不是这一套逻辑,执行计划虽然这么显示,但实际不一样,对被驱动表匹配查询时就是要遍历全表

10810

105-跟专家学习SQL优化-1

根据上面执行计划显示, 其实oracle优化器把改写后SQL做了查询转换,转换后SQL应该是下面这个样子: 看到上面这个SQL, 估计很多人就能看出问题了, 这个sql改写,只是结果上等价,...为什么看起来比较差(笛卡尔关联和全表扫描)执行计划, 执行效率又那么好呢?...下面是我给出改写方法, 非常简单, 只需要把t表在两个子查询公共条件从exists里面提取出来就可以了: 有人可能问, 这样or exists会不会还是走filter执行计划?...其实oracle从11g版本开始就可以对这个之前只能走filter执行计划查询转换, 使用是一个叫unnest_disjunctive_subq查询转换规则, 自动将sql转换成下面这个样子(下面其实是我改写..., 我没看10053, 根据执行计划反推): 如果你用是mysql或是postgresql数据库, 遇到这样sql, 如果不能像oracle优化器那样做查询转换, 也可以手工改成上面这个样子,

18510

Oracle数据库12c release 2优化器详解

一、自适应查询优化 到目前为止,Oracle 12c数据库中最大变化是自适应查询优化。...为了将对性能影响减到最低,在Oracle数据库12c第一版中,动态取样查询结果将会被保留在数据库服务器结果缓存,从Oracle数据库12c第二版开始保留在SQL计划指令知识库中。...这就允许多个SQL语句来共享一组由动态取样收集统计信息。下面将要更详细讨论SQL计划指令也利用这种级别的动态取样。 八、自动重优化 在一个SQL语句首次执行期间,一个执行计划如常被生成。...优化器利用前一次执行收集到信息来帮助确定这个替换计划。优化器可能将一个查询重新优化好几次,每次都学习并且进一步改善计划Oracle 12c数据库支持多种不同形式重优化。...(图10: 在初次执行统计信息与原有的基数估算有显著差异之后,游标被标识为可重优化) 一个SQL计划指令同样被创建,这是为了确保下次如果在customers表使用了相似的谓词SQL语句被执行,优化器注意到这些列之间相关性

1.9K60

执行计划 - Oracle谓词越界与绑定变量窥探

结果排查发现客户在导入数据后并未重新收集统计信息,SQL使用绑定变量,窥探变量刚好是越界,导致SQL第一次硬解析生成执行计划走错。再加上10G库导致接下来执行计划直接沿用内存中执行计划。...从上面的执行计划可以看出,即使未批量导入数据,SQL第二次执行直接使用第一次窥探id2>100解析生成执行计划(Peeked Binds中可以看出),所以在导入大量数据之后性能影响就会更大。...另外第一个等值查询SQL如果使用绑定变量,如果第一次查询变量值id2=1,那么SQL走索引范围扫,之后该SQL都会沿用这个执行计划,而大多数大多数情况下是查id2=100或在id2=200,理论上应该走索引快速全扫...也就是字段在没有直方图没有索引情况下,为什么变量窥探出来COST不一样。...这里需要注意是,变量窥探一般情况下在select语句使用绑定变量都会去窥探,与字段上有无索引、直方图信息无关,虽然个人认为在没有直方图和索引情况下意义不大,但是oracle都会去窥探变量值然后根据变量值生成执行计划

1.6K30

【面试题精讲】MySQL-优化器

每种执行方式都有其相应执行开销。MySQL 优化器作用就是比较多个可能执行计划和它们开销,然后选择执行开销最小那个以执行查询。 2. 为什么需要 MySQL 优化器?...每种方法性能都可能截然不同。没有优化器,数据库将无法确定如何有效地运行查询。 3. MySQL 优化器实现原理?...MySQL 优化器在实现上主要包含以下步骤: 根据查询特点、表统计信息和系统设置,生成和比较所有可能执行计划 优化器工作主要映射到两个阶段:将查询转换为一种统一内部格式...在优化阶段,优化器使用这种内部表示,以及有关表误差和数据分布额外信息,来探索所有可能查询计划。 4....当所需查询数据量超过了索引选择分界点(这个可以调整),优化器就不再使用索引,可能采用全表扫描 8.

14320

走进PG,查询SQL执行流程

PostgreSQL作为传统关系型数据,在设计架构上和Oracle非常相似,下图可以带给你直观了解。...解析器 解析器会对SQL做语法解析,生成解析树,一个SQL写法不对直接返回错误。细节可以参考pg_parse_query。...列名不存在SQL错误: groupby列和查询列不一致报错: 通过重重检查之后,数据库会生成最优‘执行规划’,它指明SQL应该按照什么样路径执行。...PG12引入plan_cache_mode参数,可以控制解析策略,灵活调整查询计划查询对SQL影响。...执行器 在SQL真正执行之前,还需要对查询计划做初始化和预检查,主要内部在InitPlan部分,初始化查询计划包括打开文件、访问存储、启动规则管理、权限检查等。

2K41

5个最好在线学习SQL和数据库课程

如果您不知道SQL是什么以及为什么要学习它,那么让我简要介绍一下SQL,以便每个人都能从中受益。SQL是一种与数据库一起使用编程语言。...本课程还介绍了高级概念 - 例如索引,使用多个表编写SQL查询,以及将它们连接在一起以生成有意义报告。 您还将探索数据库设计概念 - 例如规范化。...是否要从应用程序开发角度或从数据库管理员学习Oracle。透视,这门课程是一个很好起点。 在本课程中,您不仅将学习如何创建数据库,表和存储过程,还将学习如何编写SQL查询。...如果您正在为第一次面试或下一份工作做准备,那么面试时可能遇到很多SQL问题。这是一项重要技能,这就是为什么许多访谈都集中在SQL以及data结构和算法上。...通过本课程,您不仅可以为下次面试做好充分准备,还可以学到很多关于重要SQL概念知识。例如,如果您只是观看一章预览,讨论如何调优SQL查询或如何查找和解释执行计划,您将学到很多东西。

14.7K54

MySQL参数对比浅析(r11笔记第97天)

今天按照计划,决定得总结下MySQL参数了,说来想来,立即就做。...大体算了下,手头环境主要还是使用了Percona分支,官方相对较少,就暂且按照Percona版本来统计参数情况,可能和官方会有一些出入。...MySQL参数和Oracle相比,数量要少了很大,而且没有隐含参数说法。这一点要透明许多,这个参数量和Oracle是差不多。...Oracle我们取了几个大版本样本,开放参数个数竟然和MySQL有很相似的量级。 ?...在参数背后就是两种截然不同风格和文化,Oracle是提供强大,丰富参数定制功能,就是所说隐含参数,相反对于internal部分,大门已经渐渐关闭。

75860

DB time抖动原因分析案例分享(r6笔记第67天)

而什么是DB time,我引用了Oracle John Beresniewicz解释 好了,明确了DB time,首先我们进行了第一层定制,这是在定制后得到DB time情况,得到是快照点对应...首先查看数据库日志,日志中没有发现任何异常信息。 接着抓取ASH报告,在服务端使用tns连接到数据库实例,生成ash报告中top等待事件如下。...,按照where查询条件是应该走索引。...查看索引发现确实是存在为什么存在索引,查询也满足索引触发条件,但是查询却走了全表扫描呢?...下图是在rebuild index partition前后语句执行计划情况,可以看到rebuild之后,马上走了索引扫描, 索引失效导致了全表扫描,而对于并行问题怎么解释呢。

1.3K70

盘点 Oracle 11g 中新特性带来10大性能影响(上)

Oracle任何一个新版本,总是带来大量引人瞩目的新特性,但是往往在这些新特性引入之初,首先引起是一些麻烦,因为对于新技术不了解、因为对于旧环境不适应,从Oracle产品到技术服务运维,总是要走过一个磨合长期过程...然而一个执行计划并不总是适用于所有绑定值,为了尽可能生成准确执行计划Oracle Database 11g 引入了自适应游标共享新特性,在执行共享SQL时考虑更多因素,如果与资源开销相比,使用多个执行计划所带来收益更重要...,则会为使用绑定变量每条SQL 语句生成多个执行计划。...但是有时候这个特性会使得确定执行计划变得不稳定,如果你确定系统中无需额外自适应分析和变更执行计划,或者可能被不稳定执行计划影响。那么可能需要调整这个特性使用。...为什么要引入这个参数呢?这个参数后台解决是什么问题呢?

1K50

同样SQL,怎么突然就慢了?

Monitor) 其中ADDM相对用少,它可以自动分析 AWR 中性能数据,识别潜在性能问题,并生成相应建议报告。...同样SQL,查询不同日期,效率差距如此明显,另外客户反馈每天数据量基本相当,并没有数量级差异。 此时最先想要排查是是否有不同执行计划?...看下面这个查询结果,我们可以看到在变差时段,全都是走了全表扫372开头(PLAN HASH VALUE)这个执行计划,而这个执行计划是DPR方式,所以,虽然执行数千次,但是每次平均DISK读都相当...后续建了索引变好,后又变坏,是因为有时候选错执行计划导致又走了全表扫又触发了DPR。 其实如果再想深究探索,还有好多可以思考,比如,为什么新分区虽然数据量和历史相当,但blocks却明显增多?...比如为何建立索引后有时又选错执行计划等等。只要你愿意,就又能探索到好多知识,即便Oracle已经非常成熟,但Oracle DBA也同样可以做有技术深度。

13310

「数据仓库架构」数据仓库三种模式建模技术

星型查询是事实表和许多维度表之间联接。每个维度表都使用主键到外键联接连接到事实表,但维度表不会彼此联接。优化器识别星形查询并为它们生成高效执行计划。 典型事实表包含键和度量。...带位图索引星型转换执行计划 “带位图索引星型转换”可能导致以下典型执行计划: SELECT STATEMENT SORT GROUP BY HASH JOIN TABLE ACCESS...Oracle如何选择使用星型转换 优化器生成并保存不需要转换就可以生成最佳计划。如果启用了转换,优化器将尝试将其应用于查询,如果适用,则使用转换后查询生成最佳计划。...但是,如果维度表上约束谓词具有足够选择性,只需要检索事实表一小部分,那么基于转换计划可能更好。 请注意,优化器只有在确定基于多个条件这样做是合理情况下才会为维度表生成查询。...无法保证将为所有维度表生成查询。优化器还可以根据表和查询属性决定转换不适合应用于特定查询。在这种情况下,将使用最佳常规计划

3.1K51

SpringHibernate 应用性能优化7种方法

{executed in 13 msec} 预处理语句也是很重要信息来源,它们常常会透露出常用查询类型。了解更多日志讯息,可以查看文章:Hibernate 为什么/在何处使用该 SQL 查询?...Hibernate 提供了优化 ID 生成器以避免此问题。也即,对于序列,默认使用 HiLo id 生成器。...这些优化生成器默认在 Hibernate 4中开启。如要禁用,可将 hibernate.id.new_generator_mappings 设置为 false。 为什么生成主键仍是一个问题?...如果收到对一张新表插入语句,JDBC 驱动程序先清除对前一张表批处理语句,然后开始分批处理针对新表 SQL 语句。 Spring Batch 内置了相似的功能。...速成法5——搜索”坏“查询计划 检查最慢查询列表,看看有没有好查询计划。最常见”坏“查询计划包括: 全表搜索:通常缺少一个索引或表统计过期时进行全表搜索。

2K100
领券