Oracle Sql优化笔记

基本的Sql编写注意事项

  • 尽量少用IN操作符,基本上所有的IN操作符都可以用EXISTS代替。
  • 不用NOT IN操作符,可以用NOT EXISTS或者外连接+替代。
  • Oracle在执行IN子查询时,首先执行子查询,将查询结果放入临时表再执行主查询。而EXIST则是首先检查主查询,然后运行子查询直到找到第一个匹配项。NOT EXISTS比NOT IN效率稍高。但具体在选择IN或EXIST操作时,要根据主子表数据量大小来具体考虑。
  • 不用“<>”或者“!=”操作符。对不等于操作符的处理会造成全表扫描,可以用“<” or “>”代替。
  • Where子句中出现IS NULL或者IS NOT NULL时,Oracle会停止使用索引而执行全表扫描。可以考虑在设计表时,对索引列设置为NOT NULL。这样就可以用其他操作来取代判断NULL的操作。

  • 当通配符“%”或者“_”作为查询字符串的第一个字符时,索引不会被使用。
  • 对于有连接的列“||”,最后一个连接列索引会无效。尽量避免连接,可以分开连接或者使用不作用在列上的函数替代。
  • 如果索引不是基于函数的,那么当在Where子句中对索引列使用函数时,索引不再起作用。
  • Where子句中避免在索引列上使用计算,否则将导致索引失效而进行全表扫描。
  • 对数据类型不同的列进行比较时,会使索引失效。
  • 用“>=”替代“>”。
  • UNION操作符会对结果进行筛选,消除重复,数据量大的情况下可能会引起磁盘排序。如果不需要删除重复记录,应该使用UNION ALL。
  • Oracle从下到上处理Where子句中多个查询条件,所以表连接语句应写在其他Where条件前,可以过滤掉最大数量记录的条件必须写在Where子句的末尾。
  • Oracle从右到左处理From子句中的表名,所以在From子句中包含多个表的情况下,将记录最少的表放在最后。(只在采用RBO优化时有效,下文详述)
  • Order By语句中的非索引列会降低性能,可以通过添加索引的方式处理。严格控制在Order By语句中使用表达式。
  • 不同区域出现的相同的Sql语句,要保证查询字符完全相同,以利用SGA共享池,防止相同的Sql语句被多次分析。
  • 多利用内部函数提高Sql效率。
  • 当在Sql语句中连接多个表时,使用表的别名,并将之作为每列的前缀。这样可以减少解析时间。

需要注意的是,随着Oracle的升级,查询优化器会自动对Sql语句进行优化,某些限制可能在新版本的Oracle下不再是问题。尤其是采用CBO(Cost-Based Optimization,基于代价的优化方式)时。

我们可以总结一下可能引起全表扫描的操作:

  • 在索引列上使用NOT或者“<>”;
  • 对索引列使用函数或者计算;
  • NOT IN操作;
  • 通配符位于查询字符串的第一个字符;
  • IS NULL或者IS NOT NULL;
  • 多列索引,但它的第一个列并没有被Where子句引用;

Oracle优化器

Oracle优化器(Optimizer)是Oracle在执行SQL之前分析语句的工具。
Oracle的优化器有两种优化方式:基于规则的(RBO)和基于代价的(CBO)。

  • RBO:优化器遵循Oracle内部预定的规则。
  • CBO:依据语句执行的代价,主要指对CPU和内存的占用。优化器在判断是否使用CBO时,要参照表和索引的统计信息。统计信息要在对表做analyze后才会有。Oracle8及以后版本,推荐用CBO方式。

Oracle优化器的优化模式主要有四种:

  • Rule:基于规则;
  • Choose:默认模式。根据表或索引的统计信息,如果有统计信息,则使用CBO方式;如果没有统计信息,相应列有索引,则使用RBO方式。
  • First rows:与Choose类似。不同的是如果表有统计信息,它将以最快的方式返回查询的前几行,以获得最佳响应时间。
  • All rows:即完全基于Cost的模式。当一个表有统计信息时,以最快方式返回表所有行,以获得最大吞吐量。没有统计信息则使用RBO方式。

设定优化模式的方式

  • Instance级别:在init<SID>.ora文件中设定OPTIMIZER_MODE;
  • Session级别:通过SQL> ALTER SESSION SET OPTIMIZER_MODE=;来设定。
  • 语句级别:通过SQL> SELECT /*+ALL+_ROWS*/ ……;来设定。可用的HINT包括/*+ALL_ROWS*/、/*+FIRST_ROWS*/、/*+CHOOSE*/、/*+RULE*/ 等。

要注意的是,如果表有统计信息,则可能造成语句不走索引的结果。可以用SQL>ANALYZE TABLE table_name DELETE STATISTICS; 删除索引。
对列和索引更新统计信息的SQL:
SQL> ANALYZE TABLE table_name COMPUTE STATISTICS;
SQL> ANALYZE INDEX index_name ESTIMATE STATISTICS;

大数据合规工程师必备的7项核心技能 当我们谈论“大数据”时,往往先想到它的价值——驱动业务增长、优化用户体验、赋能智能决策。大数据的价值越大,其合规风险的“重量”就越重。2023年,全球有超过120个国家出台了数据保护法规,中国《个人信息保护法》《数据安全法》的实施进入深水区,欧盟GDPR的罚款金额屡创新高(最高达全球营收的4%)。企业面临的合规压力,早已从“被动应对监管”升级为“主动构建合规能力”。在这样的背景下,大数据合规工程师。 阅读详情

相关推荐

Git系列(一)、Git基础教程【建议收藏】

Git一、Git简介1.1、什么是Git? 一、Git简介 1.1、什么是Git? Git是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或大或小的项目。 Git是Linus Torvalds为了帮助管理Linux内核开发而开发的一个开放源代码的版本控制软件。 Git与常用的版本控制工具CVS、Subversion等不同,它采用了分布式版本库的方式,不用服务器端软件支持。 .........

一宿君 4万+

oracle sql 不等 优化6,oracle sql 优化(三)

(23) 用>=替代>高效:SELECT*FROMEMPWHEREDEPTNO>=4低效:SELECT*FROMEMPWHEREDEPTNO>3两者的区别在于, 前者DBMS将直接跳到第一个DEPT等于4的记录而后者将首先定位到DEPTNO=3的记录并且向前扫描到第一个DEPT大于3的记录.(24) 用UNION替换OR (适用于索引列)通常情况下,...

weixin_39820136的博客 1160

Flink CDC 实战:5分钟搞定PostgreSQL数据实时同步(附避坑指南)

本文详细介绍了如何使用Flink CDC实现PostgreSQL数据的实时同步,包括环境配置、逻辑复制槽创建、Flink环境搭建及实战验证。通过5分钟快速指南,帮助开发者高效搭建实时数据管道,并提供了常见问题排查和生产环境优化建议。

red88的博客 819

Oracle中的不等于号

今天碰到一个Oracle不等于的问题,最后搜索了一下,发现下面资料,拿来跟大家分享一下   关于Oracle中的不等于号: 在Oracle中, != ~= ^= 都是不等于号的意思。都可以使用。 但是奇怪是的, 我想拿出price不是180000的商品时:(price是Number类型的) SELECT id, name  FROM prod

Draling的专栏 11万+

基于 Datawhale 开源量化投资学习指南(10):基于 LightGBM 的量化选股

通过本篇文章,我们深入探索了如何运用 LightGBM 机器学习模型实现量化选股。首先,我们通过获取股票的历史数据,进行特征工程和标签制作,将选股问题转化为一个分类问题。接着,我们使用 LightGBM 训练模型,并在验证集和测试集中评估了模型的表现。该选股策略的核心在于结合机器学习算法,从历史数据中寻找能够捕捉股票短期涨跌的关键特征,从而为投资者提供辅助决策支持。虽然本文的模型取得了一定的效果,但这只是量化投资领域的一小部分。

不想宅的冷同学 1346

自动驾驶仿真 (三)—— 基于PreScan与Simulink的AEB系统仿真

自动驾驶仿真三—— 基于PreScan&Simulink的AEB系统仿真1. AEB自动紧急制动系统1. 1 TTC碰撞时间模型1. 2 C-NCAP法规部分术语与定义1. 3 主动安全ADAS系统试验项目2. AEB仿真分析建模2.1 搭建场景2.2 传感器建模2.3 添加AEB控制系统3. 典型工况仿真3.1 CCRs仿真测试3.1 CCRm仿真测试4. 参考学习的书目教材 博主前面的博文已经介绍了Prescan&Simulink基本的场景建模及仿真分析流程,《自动驾驶仿真 (二)——

zhudj08的博客 1万+

sql 不等于优化_Oracle SQL优化

一 > 应用ORACLE的HINT(提示)处理:提示处理是在ORACLE产生的SQL分析执行路径不满意的情况下要用到的。它可以对SQL进行以下方面的提示 1. 目标方面的提示: COST(按成本优化) RULE(按规则优化) CHOOSE(缺省)(ORACLE自动选择成本或规则进行优化) ALL_ROWS(所有的行尽快返回) FIRST_RO...

weixin_39997253的博客 5331

【PyTorch项目实战】之ResNet系列:resnet18、resnet34、resnet50、resnet101、resnet152

ResNet (Residual Network) :是一种深度卷积神经网络(CNN)架构,其核心思想是引入残差学习(Residual Learning)机制,通过跳跃连接(skip connections)来解决深层网络训练中的退化问题。

📷 图像处理践行者 | 传统算法 · 深度学习 · 多模态 | 分享实战经验与技术洞见,探索从像素到智能的无限可能。 6374

oracle sql 不等 优化6,ORACLE SQL性能优化系列 (六)-数据库专栏,ORACLE

20. 用表连接替换exists通常来说 , 采用表连接的方式比exists更有效率select enamefrom emp ewhere exists (select ‘x’from deptwhere dept_no = e.dept_noand dept_cat = ‘a’);(更高效)select enamefrom dept d,emp ewhere e.dept_no = ...

weixin_26833205的博客 316

主成分分析(PCA)简洁高效MATLAB实现详解

本文介绍了一个简洁高效的PCA算法实现。该实现通过SVD分解计算主成分,避免了显式协方差矩阵计算,支持两种降维方式:固定维度或按能量比例自动选择。核心步骤包括数据中心化、SVD分解和维度选择,代码量少但功能完整,适用于数据预处理、降维和特征提取等任务。实现中考虑了稀疏矩阵转换、默认参数处理等细节,可直接应用于MATLAB环境。

m0_62153576的博客 63

计算机组成原理(第三版)唐朔飞-第四章存储器-课后习题

计算机组成原理(第三版)唐朔飞-第四章存储器-课后习题

weixin_45735391的博客 17万+

《基于ORACLE SQL优化》读书笔记

注:为读《基于ORACLE SQL优化笔记》 对比RBO 与CBO 在数据选择性不佳的情况下,对执行路径的选择。 select * from emp where mgr = 7902; 1.      骗下优化器,修改表和索引统计信息 2.      CBO 对 上面语句选择FULLTABLE SCAN; 3.      RBO还是走索引。 数据准备: CREATE TABLE

JIANGJIAN12345的专栏 673

高温环境下(100℃以上)相机的几种保障方案

高温环境下相机保障措施摘要:针对120℃以上高温环境,相机需采取多重防护:1.散热设计采用金属机身、散热鳍片或风扇;2.关键部件选用耐高温材料(铝合金、特种玻璃);3.电子元件需军规级芯片并做三防处理;4.建议外接电源或耐高温电池。工业相机(如FLIR A655sc、Basler ace)及特种机型(Ximea xiQ)具备高温适应性,普通相机可加装隔热套件配合冷却系统。选择时需关注传感器信噪比和全局快门性能,并设置温度监控保护机制。注意高温会加速设备老化,需定期检测维护。(149字)

start_up_go的博客 1586

Oracle笔记 之 sql语句优化

SQL语句的执行 当Oracle数据库执行SQL语句时,会根据查询优化器分析语句,并根据分析结果生成查询执行计划。也就是说,数据库是执行的查询计划,而不是Sql语句。 查询优化器有rule-based-optimizer(基于规则的查询优化器) 和Cost-Based-optimizer(基于成本的查询优化器)。 其中基于规则的查询优化器在10g版本中消失。 对于规则查询,其最后查询的是全表扫描。而CBO则会根据统计信息进行最后的选择。 SQL语句的执行顺序 注意:在10g版本后使用CBO规则后2,3已无差

一起种梧桐吧的博客 178

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Oracle笔记-SQL优化

Oracle数据库里SQL优化的终极目标就是要缩短sql语句的执行时间。要达到上述目的,我们通常只有如下三种方法可以选择。 降低目标sql的资源消耗。 并行执行目标sql语句。 平衡系统资源的消耗。 Oracle数据库里sql优化方法论包含如下核心内容: Oracle里SQL优化的本质是基于对CBO和执行计划的深刻理解。 Oracle里SQL优化需要联系实际的业务。 Oracle里SQL优化需要适合的使用绑定变量。 降低目标sql的资源消耗 “降低目标sql的资源消耗”以缩短执行时间,这是最常用的s

marching1986的专栏 252

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

《基于ORACLE的SQL优化读书》笔记 ORACLE里应用的类型

ORACLE里应用的类型: 硬解析:(open,parse,execute,fetch,close) 软件解析:SESSION_CACHED_CURSORS 设置为0(每次open,parse,bind,execute,fetch,close) 软软解析:SESSION_CACHED_CURSORS 设置>0,执行三次以上。(一次open,每次parse,bind,execute,fetch

JIANGJIAN12345的专栏 605

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

ORACLE笔记之SQL语句的优化

SQL语句的优化总结如下   sql语句的优化可以按照如下六个步骤进行: 合理使用索引避免或者简化排序消除对大表的扫描避免复杂的通配符匹配调整子查询的性能EXISTS和IN运算符 下面我就按照上面这六个步骤分别进行总结: 1-------------------------------------合理使用索引   首先要明确创建索引的根本目的是:提高查询效率;

617

Oracle学习笔记之SQL优化方案

为什么要Oracle优化: 随着实际项目的启动,Oracle经过一段时间的运行,最初的Oracle设置,会与实际Oracle运行性能会有一些差异,这时我们 就需要做一个优化调整。 Oracle优化这个课题较大,可分为四大类: 》主机性能 》内存使用性能 》网络传输性能 》SQL语句执行性能【程序员】 下面列出一些oracleSQL优化方案: (01)选择最有效率的表名顺序(笔试常考) ...

tlimited的博客 262

oracle sql优化笔记

查看sql执行计划explain plan for         需要调试sql例如:Select* from abc;select* from table(dbms_xplan.display);MERGE JOIN CARTESIAN 缓慢发现一段sql一个时间字段的查询条件发生变更导致sql查询缓慢 时间字段 &gt; (2017年很快),时间字段 &gt; (2018年很慢).排查步骤1...

221
上一篇: 代理模式(转载)
下一篇: HTTP协议缓存策略深入详解之etag妙用(转载)
a8366
博客等级 码龄19年 10粉丝 164原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值