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

Oracle SQL查询在查询中略有改动会导致大的结果返回时间差异

Oracle SQL查询在查询中略有改动会导致大的结果返回时间差异。这是因为Oracle SQL查询是建立在关系数据库管理系统之上的,而关系数据库管理系统是通过表格形式来存储数据的。因此,当查询涉及到多个表格或者需要对表格进行连接时,如果这些表格之间存在大量的数据关联,那么查询的性能就会受到影响。

此外,Oracle SQL查询也存在着一些限制,比如不支持跨表格的连接查询等。因此,在进行查询时,需要根据具体情况进行优化,以确保查询的效率和准确性。

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

相关·内容

90%面试者都不知道这道题答案

而对于大于3这种情况,虽然根据CHECK约束和列定义,可以推断出这条查询不会返回任何记录,但是Oracle优化器并没有聪明到根据列精度来进行分析,因此这个查询执行全表扫描。...可以看到,无论是执行时间,还是逻辑读,两个SQL没有任何差别。为了更好证明Oracle并没有读取ID等于3记录,执行下面的查询: ? ?...先构造一张表,现在分别执行两个查询,检查执行结果: ? ? ? ? 由于采用都是全表扫描,二者执行时间和逻辑读完全一样。 下面建立一个物化视图: ? 下面检查系统设置是否满足查询重写: ? ?...1、Check约束下,前者执行全表扫描,后者经过check约束检查后,通过filter结束查询,能够更高效地返回结果; 2、使用索引时候,由于Oracle索引结构特点,两者扫描节点都是从4...开始,执行计划和逻辑读,执行时间等各方面都不存在性能差异; 3、使用物化视图过程,前者同时扫描物化视图和原表,效率较低。

81860

一个执行计划异常变更案例 - 外传之SQL Profile(上)

2.不能修改应用SQL情况下使SQL语句按指定执行计划运行。...实际t1表符合t1.name like ‘%ABC%’条件记录只有3条,优化器预估则是500条,即500/10000*100%=5%,应该是Oracle默认选择率,但关于这点,略有疑问,按照MOS(...因为实际t1使用like结果集很小,一个表和一个小结果集关联,而且表关联字段有索引,比较适合于Nested Loop连接。我们看下使用这种连接执行计划, ?...Join221,再看t1表返回行数预估是500,远高于实际like过滤后其实际结果集3,因此会对nested loop连接产生了一个过高成本预估,导致优化器选择了Hash Join执行计划,...这条SQL使用nested loop执行计划T1表原始其预估行数是500,计算500*0.006=3,这就是为什么10053trace以及执行计划中表t1预估行数是3原因,我们没有对SQL做任何一些改动

66320

【云和恩墨大讲堂】从执行计划洞察ORACLE优化器“小聪明”

某搜索网站,“oracle 执行计划”关键字搜索结果与“oracle”关键字搜索结果占比为1.7%。足可见执行计划在ORACLE中举足轻重地位: ?...我们对上述SQL稍加改动,再看执行计划: ? 什么情况?DEPT表不见了,执行计划居然“残缺”了: 1、这是ORACLEBUG吗? 2、少了一张表,结果正确吗?...,即子查询D对整个SQL返回结果是没有任何影响,该SQL完全等价于如下SQL: SELECT COUNT(1) FROM EMP E 而事实上呢,我们看看ORACLE执行计划: ?...其实,除了上述两种场景外,还有一种场景也导致table access full。我们先来看一个非常简单案例,我们EMP.DEPTNO上创建一个索引,因为经常会遇到查询某个特定部门员工信息。...刚才案例属于第一种,那么第二种又是怎么回事呢? 以下是一个真实案例: 系统存在一个日志表,数据量非常,我们对日志表按照日志时间(log_date)做了分区。

98431

95-最近几个oracle数据库优化项目的经验总结

这个系统, 我能提出一些优化建议, 但是因为设计上原因, 需要做很多大改动, 短期想看到效果是不可能. 涉及到需要开发商配合和较大改动, 这个时间就没法控制了....oracle为收集统计信息做了自动任务, 这个自动任务建议是要开启, 否则就有可能不定时出现SQL执行计划变差导致性能问题....有些资深dba用自己脚本收集, 不太建议; dba可以结合业务特点, 默认收集任务基础上做微调, 比如调整时间窗口, 与业务错开; 分区表增量收集;表并行收集; 并发收集; 调整默认stale比例...写法与业务逻辑实现方法: 结果分页查询,还有用分页查询逻辑做数据导出 , 都是不建议....分页就尽量把结果集缩小; 导出就一次性导出; 结果集使用标量子查询 ,执行时间很长, 而且并行也帮不上忙.

42010

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

编辑手记:SQL执行过程,选择不同执行计划所产生性能差异非常,因此能够符合业务地选择正确执行计划非常重要。...结果排查发现客户导入数据后并未重新收集统计信息,SQL使用绑定变量,窥探变量刚好是越界,导致SQL第一次硬解析生成执行计划走错。再加上10G导致接下来执行计划直接沿用内存执行计划。...value,查询id2>199走索引范围扫(结果=0): ?...此时表id2>199数据已经有了大部分,但是由于统计信息未更新,谓词越界,再次查询大于199SQL依旧走索引范围扫: ? 现在模拟变量窥探问题,首先查询id2于100数据: ?...这里将内存执行计划置为失效,这里方法有很多种,暂不做一一介绍: ? 从上面可以看出rows和bytes值都有差异,如果数据差异,cost也变化。

1.5K30

傻瓜MySQL查询缓存都不知道...

端将从查询缓存检索结果返回给客户端,而不是再次解析执行SQL查询缓存在session之间共享,因此,一个客户端生成缓存结果集,可以响应另一个客户端执行同样SQL。...query_cache_min_res_unit说明 默认大小是4KB,如果有很多查询结果很小,那么默认数据块大小可能导致内存碎片,由于内存不足,碎片可能强制查询缓存从缓存删除查询。...开启queryCache场景 开启查询缓存时,查询语句第一次被执行时会将SQL文本及查询结果缓存在QC,下一次执行同样SQL执行从QC获取数据返回给客户端即可。...文本及数据,执行时间0.89s,由于开启了QC,SQL文本及执行结果被缓存在QC,第二次执行执行同样SQL查询语句,直接命中QC且返回数据,不需要发生硬解析,所以执行时间降低为0s,从profile...,然后锁定QC然后更新缓存结果导致之前缓存结果失效,再次执行相查询SQL还是未命中,有得重新添加到QC,这样频繁锁定QC->检查QC->添加QC->更新QC非常消耗资源,降低数据库并发处理能力

76720

【云和恩墨大讲堂】Oracle线上嘉年华第二讲

编辑手记:Oracle线上嘉年华,正在持续分享。本次主题是系统割接SQL解析问题和结合业务SQL优化改写技巧。...案例SQL如上,大致由两部分组成,上下各是一个标量子查询,然后用union all联合在一起做了一个order by,结果显示中使用了分页。...优化SQL,我们优先考虑能否优化cost高步骤,比如表全表扫描、表全索引快速扫描、跳跃索引扫描、表排序等cost消耗; 其次看filter(优化了nestedloop)、nested loop...注:Oracle估算是不存在0 Rows情况,如果评估结果是0,算作1....(这里并不会改变SQL业务逻辑,虽然我们是先排序取rownum限制了,但是标量子查询时主查询是先排序还是后排序取rownum限制对于主查询返回结果集没有任何影响) 根据这种思路,我把SQL改写如下:

83261

MySQL 体系架构简介

但是 InnoDB 实在太优秀了,最终 2006 年时侯,成功吸引到魔王 Oracle 注意,大手一挥,就把 InnoDB 收购了。...数据库大小决定了故障恢复时间长短,InnoDB 可以利用事务日志进行数据恢复,这会比较快。主键查询 InnoDB 引擎下也相当快,不过需要注意是如果主键太长也导致性能问题。...2.2.3 SQL 接口 SQL 接口用来接受客户端发送来各种 SQL 命令,并且返回用户需要查询结果。 如: DDL DML 存储过程 视图 触发器 等都在这里被处理。...语法检查通过后,解析器查询缓存,如果缓存中有对应语句,就直接返回结果不进行接下来优化执行操作。...2.2.6 缓存 包括全局和引擎特定缓存,提高查询效率。如果查询缓存中有命中查询结果,则查询语句就可以从缓存取数据,无须再通过解析和执行。

82540

【DB笔试面试570】OracleSQL优化写法上有哪些常用方法?

♣ 题目部分 OracleSQL优化写法上有哪些常用方法? ♣ 答案部分 一般书写SQL时需要注意哪些问题,如何书写可以提高查询效率呢?...实际上,Oracle解析过程,会将“*”依次转换成所有的列名,这个工作是通过查询数据字典完成,这意味着将耗费更多时间。...,如果子查询DEPTNO有NULL存在,那么整个查询都不会有结果Oracle 11g之前,如果主表和子表DEPTNO未同时有NOT NULL约束,或都未加IS NOT NULL限制,那么Oracle...,尤其是要避免同一个SQL多次访问同一张表。...(41)对于一些固定性查询结果集或统计性SQL语句(例如,SQL语句非常复杂,但是最终返回结果集很简单,只包含少数几行数据)可以使用结果集缓存(Result Cache)。

3.6K30

因为一个空格引发编程“惨案“

小张做项目与语言处理有点关系,他们把处理结果也就是字符串保存到在数据库里面,后续需要按照条件把这些数据查询出来,但需要对这些字符串做严格区分,也就是说,如果查询A字符串,不能把B字符串查询出来,哪怕这两个字符串只有一个空格差异...假设我们需要查询名字为Tom记录(没有空格),SQL很简单: SELECT * FROM white_space WHERE name = 'Tom'; 然而,让小张大跌眼镜是,上面的SQL竟然返回两条数据...公司有一套ORM来做这样适配,开发人员只要按照标准来写SQL就可以了,但是,如果在SQL语句中加上BINARY,切换到Oracle数据库就会出错,这可怎么办?!...当然,也可以判断数据库类型,如果是MySQL数据库,就加上BINARY关键字,否则就不加(Oracle数据库可以严格区分后置空格),但是,这样改动也太大了,因为MySQL语句都完全忽略了后置空格存在...,比如GROUP BY: SELECT name,COUNT(*) FROM white_space GROUP BY name 返回这样结果: ?

57110

查询优化器基础知识—SQL语句处理过程

Latch争用增加语句执行时间并降低并发性。 软解析 软解析是任何不是硬解析解析。 如果提交语句与共享池中可重用SQL语句相同,则Oracle Database将重用现有代码。...这种语义差异意味着第二个语句不能重用第一个语句代码。 即使两个语句语义上相同,环境差异导致难以解析。...3.2 Oracle 数据库如何处理 DML 大多数 DML 语句都有一个查询组件。查询,执行游标会将查询结果放入一组称为结果。...对于某些查询,数据库会尽快返回第一行,而对于其他查询,它会在返回第一行之前创建整个结果集。...3.2.2 读取一致性 通常,查询使用 Oracle 数据库读取一致性机制检索数据,该机制可确保查询读取所有数据块与单个时间点保持一致。 读取一致性使用 undo 数据来显示过去数据版本。

3.9K30

Oracle Real Time SQL Monitoring

*这样查询返回数据量越大,这个值也越大。...需要再次强调是,持续时间衡量是从SQL开始执行即游标打开直到游标被关闭或取消时间跨度,这意味着如果数据库1分钟内完成一个查询,但随后产生数百万结果每次只能返回几行,从应用角度看,这个查询将需要很长时间...例如我通过monitor这个hint强制让ORACLE监控这个SQL,这个SQL返回大量结果集给客户端,我们通过EMCC来监控这个SQL相关监控信息: ?...数据库时间 数据库时间即DB Time,显示是一个查询在数据库执行花费时间,就DML操作来说,一般数据库时间基本等于持续时间,因为DML操作不用返回结果集,没有网络交互时间,但是如果运行是一个...我们再次看一下上面已经使用过一张图,对于这个查询来说,由于要返回大量结果集给客户端,因此持续时间远远大于数据库时间。 ?

1.7K80

Oracle转换Postgres

3、语法差异 PG中有少数语法不同但功能相同SQL。ACS/pg自动进行转换,只有大部分函数不同,需要手工进行转换。这个工作由db_sql_prep来完成。...Sysdate Oracle使用sysdate函数获取当前日期和时间(以服务器时区为准)。Postgres使用’now’::timestamp作为当前事务启动日期和时间。...Postgsql可以将FROM子句丢弃。可以postgres创建一个视图作为这个表从而消除上述问题。这样就可以不干扰Postgres解析器情况下兼容OracleSQL。...(+) (+)表示,如果表b没有匹配item_id值,匹配继续下去,作为一个空行进行匹配。...空字符串与NULL Oracle,strings()空和NULL字符串内容相同。可以将NULL和和一个字符串连接起来作为结果。但是postgres,这种情况得到结果是NULL。

5.7K00

Oracle转换Postgres

3、语法差异 PG中有少数语法不同但功能相同SQL。ACS/pg自动进行转换,只有大部分函数不同,需要手工进行转换。这个工作由db_sql_prep来完成。...Sysdate Oracle使用sysdate函数获取当前日期和时间(以服务器时区为准)。Postgres使用’now’::timestamp作为当前事务启动日期和时间。...Postgsql可以将FROM子句丢弃。可以postgres创建一个视图作为这个表从而消除上述问题。这样就可以不干扰Postgres解析器情况下兼容OracleSQL。...(+) (+)表示,如果表b没有匹配item_id值,匹配继续下去,作为一个空行进行匹配。...空字符串与NULL Oracle,strings()空和NULL字符串内容相同。可以将NULL和和一个字符串连接起来作为结果。但是postgres,这种情况得到结果是NULL。

8.1K30

SQL审核:OR展开与子查询优化案例详解

下面来查看此 SQL 执行计划: 执行计划,可以看到谓词信息部分有多个 FILTER,执行计划中有3个 FILTER,但是 SQL*PLUS ,只有两个 OR,所以需要弄清楚哪些 FILTER...这里有一个判断准则: 当 FILTER 下面有两个儿子表(结果集)时候,此时FILTER就是子查询没有展开导致,此时 FILTER 可以看成是执行完子查询过滤; 当 FILTER 下面只有一个儿子表...下面查看一下主表返回行数: 这里只简单查询表 GROUP BY 值,这里根据上面的值估计主表返回结果集很多,如果要准确值,可以关联上面2张表查询。...总结 本条 SQL 优化是通过改写 SQL 来完成,意味着业务需要修改 SQL,可能会出现业务修改完 SQL 再上线,这中间可能消耗大量时间,并且如果 SQL 后期出现性能问题,需要再次修改 SQL...近期文章 新年贺礼:云和恩墨大讲堂期刊第二期 删繁就简-云和恩墨一道面试题解析 用SQL解一道数学题:Gauss和Poincare 新年贺礼:云和恩墨大讲堂期刊发行 2015 Oracle热门文章精选

1.1K40

性能为王:SQL标量子查询优化案例分析

远远大于SQL访问表占用物理大小。所以初步判断执行计划存在某个对象被轮询。...逻辑读比物理读性能好,并且逻辑读消耗时间很短,但是过高逻辑读带来CPU使用率增加,RAC环境导致过多GC等待,还有可能影响后来一些TX,INDEX ITL等等待事件出现,前不久就曾经遇到一个逻辑读导致...标量子查询,当主查询返回一行数据时,所有的标量子查询就要执行一次,如果在连接列有索引时,标量子查询主表返回行很少情况下,对性能影响不大,常常出现在OLTP环境,并且连接列一般都有索引;如果在OLAP...环境,看到标量子查询千万要小心,通常,主表返回行很多,并且子查询表通常在连接列上面无索引,导致性能很低下,本案例就是这种情况; 2....12c新特性改进 对于类似以上情况,Oracle Database 12C,优化器已经可以自动实现等价改写,但是需要注意12.1.0.2版本中有BUG,可能导致结果集不准确。

1.5K50

深入剖析:not exists对外层查询影响

也就是说本次测试,10g,外层查询不进行t1和t2扫描,直接返回结果了,而12c,外层查询还要进行t1表和t2表层扫描才返回结果。 那究竟是不是版本差异呢?...这其实不是10g和12c差别,而是not exists返回数据对外层影响。子查询返回0行记录,才满足not exist条件,从而返回外层查询结果。...10g,子查询返回了一行记录 不满足not exists(即0行才满足),所以,也就不用在外层继续查询了。直接返回记录0行。...12c,子查询返回0行记录,满足not exist条件,所以还需要在外层查询中继续查询。 正是这一行记录差异导致了not exists对外层查询影响。...进而导致整个sqlbuffer get差异。 反证这个结果,我只要在12c,运行子查询结果返回大于0行,不满足not exists,也应该不会去外层查询了。

70350

【史上最详解】Oracle数据库各种锁 - 看完这篇就够了!

事务修改块时(其实就是修改行)检查行 row header 标志位,如果该标志位为0(该行没有被活动事务锁住),就把该标志位修改为事务该块获得itl序号,这样当前事务就获得了对记录锁定...( 2) 字典定义锁: 用于防止进行字典操作时又进行语法分析,这样可以避免查询字典同时改动某个表结构。...如果此时其他用户对上面返回结果数据进行dml或ddl操作都会返回一个错误信息或发生阻塞。 1:对返回结果集进行update或delete操作会发生阻塞。 左下角时间执行了很久。 ?...这里面有一种潜在危险就是由于被选出结果集并没有被锁定,是存在一种可能被其他用户更改可能。因此Oracle仍然建议是用悲观封锁,因为这样更安全。...---- Select … for update 当一个用户执行 select..for update 对返回结果集进行修改时,如 果结果集已经被另一个会话锁定,此时 Oracle 已经对返回结果集上加了排它行级锁

15.3K85

变与不变: Undo构造一致性读例外情况

不过这个案例存在一点小瑕疵,因为如果一不小心,很可能导致结果与预期不符,这是因为这里有一个例外存在。...再介绍一下OPEN CURSOR,Oracle当一个游标被打开,其结果集就已经确定了,也就是说这个游标会根据OPEN CURSOR这个时间点对应SCN来构造一致性查询。...使用这种办法可以模拟一个查询,OPEN CURSOR相当于查询开始时间,其早于其他会话修改提交时间,而FETCH时间相当于查询读取到这条记录时间,而该时间晚于其他会话提交时间SQL...会话3上执行查询,这时会看到会话2修改提交后结果SQL> SET SQLP 'SQL3> ' SQL3> SELECT NAME FROM T_UNDO WHERE ID = 1119; NAME...$ 到目前为止,所有都是预期之内结果Oracle利用UNDO来存储UPDATE前镜像,当查询发现需要访问数据块SCN大于会话发起SCN,而需要通过UNDO存储前镜像来构造一致性读,找到会话需要读取修改前数据

38920

「干货」Hive常用10应用技巧『Hive系列2』

解决痛点:对于工作中经常应用Hive,以及准备去面试同学,相信此篇文章让你有所收获。 01 Hive运行顺序 应用Hive过程,你是否有过这样疑问?...[A为小表] A inner join B on A.key = B.key ; 05 hive与mysql/oracle差异「join场景」 内关联场景,hive与mysql/oracle存在一些差异...正确写法 A join B on A.key=B.key ; 错误写法 from A ,B where A.key=B.key ; 下面写法mysql/oracle等价于内连接,但是Hive中会导致笛卡尔积...06 分区缩小扫描范围「where场景」 有些同学SQL时候,有时会忘记加分区筛选,这会导致全表扫描。不仅影响自己产出速度,还会占用过多资源,影响整个集群使用。...原理:distinct需要将col列全部内容都存储一个内存,可以理解为一个hash结构,key为col值,最后计算hash结构中有多少个key即可得到结果

1.7K10
领券