PL/SQL优化

PLSQL程序性能分析及优化 PLSQL程序性能分析及优化   经验总结 实施过程中,经常会使用 PL/SQL Developer 工具进行数据转换和处理业务数据。通过性能 优化来提高程序执行效率是必须掌握的一份技能。性能问题中绝大部分都是由于程序编写的 不合理、不规范造成的。本文档阐述了程序中常见的不优化的脚本编写,导致的性能问题。 立即下载

附1 PL/SQL优化

1.        Oracle索引概述

索引是表的一个概念部分,用来提高检索数据的效率。实际上,Oracle使用了一个复杂的自平衡B-tree结构。一般情况下,通过索引查询数据比全表扫描要快。当Oracle找出执行查询和Update语句的最佳路径后,Oracle优化器将使用索引。同样在联结多个表时使用索引也可以提高效率。另一个使用索引的好处是,它提供了主键(primary key)的唯一性验证。除了那些LONG或LONG RAW数据类型,可以索引几乎所有的列。通常,在大型表中使用索引特别有效。在扫描小表时,使用索引同样能提高效率。虽然使用索引能得到查询效率的提高,但是我们也必须注意到它的代价。索引需要空间来存储,也需要定期维护,当有记录在表中增减或索引列被修改时,索引本身也会被修改。这意味着每条记录的INSERT 、DELETE 、UPDATE将为此多付出4 、5 次的磁盘I/O 。因为索引需要额外的存储空间和处理,那些不必要的索引反而会使查询反应时间变慢。定期的重构索引是有必要的(alter index <index_name> rebuild <tablespace>)。

Oracle对索引有两种访问模式:1)索引唯一扫描( INDEX UNIQUE SCAN),索引将通过唯一扫描的方式被访问,获得相对应的ROWID,通过ROWID访问表的方式执行下一步检索。如果被检索返回的列包括在索引列中,ORACLE将不执行后续的处理而是通过ROWID访问表。 2)索引范围查询(INDEX RANGE SCAN),适用于两种情况,a) 基于一个范围的检索;b) 基于非唯一性索引的检索;由于索引范围查询返回一组值,它的效率就要比索引唯一扫描低一些。

2.        索引的优先等级

当SQL语句的执行路径分布在多个表上的多个索引时,Oracle会同时使用多个索引并对它们的记录进行合并,检索出仅符合全部条件的记录。在Oracle在选择执行路径时,唯一性索引等级高于非唯一性索引,只有当WHERE子句中索引列和常量比较才有效。如果索引列和其他表的索引列比较,这种子句在优化器中的等级是非常低的。如果不同表中两个想同等级的索引将被引用,from子句中表的顺序将决定哪个会被先使用。from子句中最后的表的索引将有最高优先级。如果相同表中两个相同等级的索引将被引用,where子句中最先被引用的索引将有最高的优先级。当Oracle无法判断索引的等级高低差别时,将只使用一个索引,就是在where子句中被列在最前面的那个。

3.        Oracle处理顺序

oracle的解析器按照从右到左的顺序处理from子句中的表名,因此from子句中写在最后的表将被最先处理。在from子句中包含多个表的情况下,你必须选择记录条数最少的表作为基础表。当oracle处理多个表时,会运用排序及合并的方式连接它们。首先,扫描第一个表(from子句中最后的那个表)并对记录进行派序,然后扫描第二个表(from子句中最后第二个表),最后将所有从第二个表中检索出的记录与第一个表中合适记录进行合并。基础表(Driving Table)是指被最先访问的表(通常以全表扫描的方式被访问)。根据优化器的不同, Sql语句中基础表的选择是不一样的。如果你使用的是cbo,优化器会检查sql语句中的每个表的物理大小,索引的状态,然后选用花费最低的执行路径。如果你用rbo,并且所有的连接条件都有索引对应,在这种情况下,基础表就是from子句中列在最后的那个表。

4.        那些情况下会使索引失效

1)        如果索引列所对应的值的第一个字符由通配符开始,索引将不被采用。例如:where index_column like ‘%007’。

2)        Where子句中,如果索引列是函数的一部分。优化器将使用全表扫描。例如:where function_name(index_column) = value

3)        Where子句中,如果对索引列使用计算。优化器将使用全表扫描。例如:where index_column + 200 > 500

4)        避免在索引中使用任何可以为空的列,Oracle将无法使用该索引。对于单列索引,如果列包含空值,索引中将不存在此记录。对于复合索引,如果每个列都为空,索引中同样不存在此记录。

5)        当比较不同数据类型的数据时,Oracle自动对列进行简单的类型转换,应当避免索引列的类型。如果存在改变索引列的类型,Oracle将无法使用该索引。例如:where to_number(index_column) = 12345


6)        Where子句中,如果索引列比较使用is null、is not null、!=、<>,Oracle将无法使用该索引。因为索引只能告诉你什么存在于表中,而不能告诉你什么不存在于表中。例如:index_column is null 、index_column<>0

7)        Where子句中,如果索引列使用字符连接函数(||),Oracle将无法使用该索引。例如:where index_column||’xxx’ = value

8)        如果在索引中使用Not,Oracle将无法使用该索引。例如:where index_column not = 0

9)        如果一定要对使用函数的列启用索引,可使用基于函数的索引(Function-Based Index)。例如:

create index fidx_emp_upper on emp (upper(ename)); --建立函数索引
    select * from emp where upper(ename) = ‘scott’;--将使用函数索引

5.        使用Exists

Exists使查询更为迅速,因为RDBMS核心模块将在子查询的条件一旦满足后,立刻返回结果。

1)        用exists替换distinct

2)        用exists替代in

3)        用not exists替代not in

6.        关于Or的使用

1)        用UNION替换OR,通常情况下,用UNION替换WHERE子句中的OR将会起到较好的效果。对索引列使用OR将造成全表扫描。注意,以上规则只针对多个索引列有效。如果有column没有被索引,查询效率可能会因为你没有选择OR而降低。

2)        用IN来替换OR。

7.        关于group by

提高group by 语句的效率,可以通过将不需要的记录在group by 之前过滤掉。例如:Group by dptno having dptno>20 用 where dptno>20 group by dptno 替代

8.        order by使用索引

Order by中所有的列必须包含在相同的索引中并保持在索引中的排列顺序,Order by中所有的列必须定义为非空,where子句使用的索引和Order by子句中所使用的索引不能并列。

9.        那些是耗费资源的操作

带有distinct 、union 、union all、minus、intersect、order by的sql语句会启动Sql引擎执行耗费资源的排序(sort)功能。distinct需要一次排序操作,而其他的至少需要执行两次排序。一般来说,带有union、union all、minus、intersect的Sql语句都可以使用其他方式重写,在考虑程序可读性情况下,通过调整SORT_AREA_SIZE的大小,使用union、 minus 、intersect也是可以考虑的。



PLSQL性能优化 oracle PLSQL性能优化 立即下载

相关推荐

PLSQL美化 神器

PLSQL美化器,真的很不错哦,写代码再也不用愁格式排版问题,非常漂亮了,便于自己在优化后的代码上加注释。

1. PLSQL程序开发总结

1. PLSQL程序优化原则 1.1 导致性能问题的内在原因 导致系统性能出现问题从系统底层分析也就是如下几个原因: l  CPU占用率过高,资源争用导致等待 l  内存使用率过高,内存不足需要磁盘虚拟内存 l  IO占用率过高,磁盘访问需要等待 1.2 PLSQL优化的核心思想 PLSQL优化实际上就是避免出现“导致性能问题的内在原因”,实际上编写程序,以及性能问题跟踪应该本着这个

han_dongwei的专栏 5031

PLSQL美化规则

PLSQL美化规则

PL/SQL的性能优化

PL/SQL的性能优化是提高数据库应用程序性能的关键。通过优化SQL查询、优化PL/SQL代码、进行数据库设计和索引优化,以及使用性能调优工具和技术,可以显著提升应用程序的响应速度和吞吐量。

jakelihua 1821

PLSQL程序优化和性能分析方法

1. 前言 5 1.1 目的 5 1.2 文档说明 5 1.3 词汇表 5 1.4 参考资料 5 2. PLSQL程序优化原则 6 2.1 导致性能问题的内在原因 6 2.2 PLSQL优化的核心思想 6 2.3 ORACLE优化器 6 2.4 PLSQL优化 7 2.4.1 选择最有效率的表名顺序 7 2.4.2 WHERE子句中的连接顺序 8 2.4.3 SELECT子句中避免使用 ‘ * ‘ 8 2.4.4 用EXISTS替代IN 8 2.4.5 用NOT EXISTS替代NOT IN 9 2.4.6 用表连接替换EXISTS 9 2.4.7 用EXISTS替换DISTINCT 10 2.4.8 减少对表的查询 10 2.4.9 避免循环(游标)里面嵌查询 11 2.4.10 尽量用union all替换union 13 2.4.11 使用DECODE函数来减少处理时间 13 2.4.12 group by优化 13 2.4.13 尽量避免用order by 14 2.4.14 用Where子句替换HAVING子句 14 2.4.15 使用表的别名(Alias) 14 2.4.16 删除重复记录 14 2.4.17 COMMIT使用 15 2.4.18 减少多表关联 15 2.4.19 批量数据插入 15 2.5 索引使用优化 16 2.5.1 避免在索引列上使用函数或运算 16 2.5.2 避免改变索引列的类型. 17 2.5.3 避免在索引列上使用NOT 17 2.5.4 用>=替代> 18 2.5.5 避免在索引列上使用IS NULL和IS NOT NULL 18 2.5.6 带通配符(%)的like语句 18 2.5.7 总是使用索引的第一个列 19 2.5.8 多个平等的索引 19 2.5.9 不明确的索引等级 19 2.5.10 自动选择索引 19 2.5.11 使用提示(Hints) 19 2.5.12 表上存在过旧的分析 20 2.5.13 表上存在并行 21 2.5.14 关于索引建立 21 3. PLSQL程序性能问题测试方法 21 3.1 性能问题分析 21 3.2 EXPAIN PLAN分析索引使用 22 3.3 TOPSQL分析 24 3.4 针对性语句搜索 28 3.5 后台存储过程跟踪 29 3.6 性能监控 30 4. 性能测试工具设计思想 31

手把手教你设计低噪声前置放大电路:从光电二极管到X射线探测器的实战配置

本文实战指南详细解析了低噪声前置放大电路的设计,重点针对光电二极管和X射线探测器等微弱信号源。文章深入对比了跨阻放大器与电荷灵敏放大器的核心架构、噪声优化策略及PCB布局技巧,手把手指导从电路选型、仿真验证到调试测试的全流程,助力工程师构建精准可靠的信号链。

tech5的博客 514

给PLSQL插上飞翔的翅膀-PLSQL优化

60-80% of database performance issues are related to poorly performing SQL,60-80%的数据库性能问题要归结于生产中糟糕的SQL语句!以此一文来总结笔者近10多年来的工作经验并基于最基本的也是最有效的对于Oracle数据库中的RBO、CBO、索引、WHERE条件进行讲解同时配以大量案例来帮助读者从此文中学到的相关的理论...

weixin_30662011的博客 464

从零到一:在Ubuntu 20.04上搭建ROS1与PX4无人机开发环境

本文详细指导如何在Ubuntu 20.04系统上搭建完整的ROS1与PX4无人机开发环境。内容涵盖ROS Noetic安装、PX4固件源码编译、MAVROS通信桥接以及QGroundControl地面站的配置,并通过Gazebo仿真完成全链路联调测试,为无人机算法开发与验证提供稳定可靠的基础平台。

weixin_29292431的博客 167

PLSQL性能优化技巧

文章转自 :https://blog.youkuaiyun.com/oChangWen/article/details/52728637, 案例引用:https://blog.youkuaiyun.com/weixin_39452806/article/details/79045946   好文要顶,感谢博主们分享! 一、理解执行计划 1.什么是执行计划             oracle数据库在执行sql语句...

PeterOK的博客 1万+

旋转因子量化仿真

在单bit接收机中,通过量化FFT核函数来简化计算,将复数坐标中旋转因子单位圆上的点近似到正方形四个边上,就能够用累加实现复数乘法,从而避免使用DSP乘法器。通过仿真查看不同阶的核函数简化效果。

CyberInversion的博客 3103

Jetson Orin NX深度学习环境配置全攻略:从JetPack到PyTorch避坑指南

本文提供Jetson Orin NX深度学习环境配置的完整避坑指南。重点讲解如何正确利用JetPack SDK作为系统基石,使用Miniforge管理Python环境,并安装与CUDA版本严格匹配的PyTorch特供版本。通过详细的步骤和验证方法,帮助开发者在ARM架构的嵌入式平台上高效搭建稳定的AI开发工作站。

yolo5detector的博客 272

PL/SQL性能优化

一:SQL性能优化原理 1.1sql处理体系结构 1.2执行计划 sql语句转换前的步骤: 1.语法检查:检查sql语句的拼写是否正确 2.语义分析:核实所有与数据字典不一致的表或列的名字 3.概要存储检查:检查数据字典,以确定该sql语句的概要信息是否已经存在 4.生产执行计划:使用CBO规则和数据字典中的统计表来决定最佳执行计划 5.生成二进制代码:基于执行计划,生成可执行代码 执行计划是or...

weixin_44769733的博客 510

推荐系统(一)概述

在互联网领域,推荐系统(Recommendation Systems)的应用非常广泛。在音视频方面,如抖音、快手、哔哩等;在电商平台方面,如京东、淘宝、拼多多等。推荐有助于帮助用户快速发现潜在感兴趣的内容(音视频、商品、新闻等信息流),从而提升用户体验,同时有助于提升商业效率。从本文开始,笔者将结合自身在信息流推荐领域的经验,通过系列文章对推荐系统展开介绍。

Jin_Kwok的博客 6084

PL/SQL优化34条

详情见: PL/SQL优化34条

1679

手把手教你学Simulink——基础储能管理场景实例:基于Simulink的压缩空气储能(CAES)系统简化模型仿真

本文介绍了基于Simulink的压缩空气储能(CAES)系统简化模型仿真方法。CAES作为大规模长时储能方案,相比锂电池具有成本低、寿命长等优势。文章详细讲解了AA-CAES系统组成、热力学建模理论,以及Simulink实现流程,包括储气室、压缩机、膨胀机等核心模块的建模方法。通过8小时充电(50MW)和6小时放电(40MW)的仿真,验证了系统可实现60%往返效率。该模型为理解CAES系统运行机制提供了实用工具,并指出热管理、储气室特性等工程实践要点,为新型电力系统储能规划提供了仿真基础。

MHD0815的博客 171

工程师必读一次性讲明白系列(十三)眼图、阻抗匹配、信号一致性、射频匹配、电磁感应

概念主要作用影响因素解决方法眼图评估信号质量,显示失真和噪声噪声、信号失真、时序抖动改善信号源、使用低噪声组件阻抗匹配避免信号反射,提高传输效率阻抗不匹配、传输线路特性使用匹配电路、适配器信号一致性保证信号稳定准确传输传输线路、噪声干扰使用屏蔽、滤波器,选择合适线路射频匹配确保射频信号高效传输天线设计、阻抗不匹配使用射频匹配器、调整天线设计电磁感应防止电磁干扰对信号的影响设备之间的电磁干扰(EMI)屏蔽、接地、滤波器。

weixin_43199439的博客 159

oracle pl/sql 优化

-- oracle pl/sql 优化   pl/sql 优化实际上是未来避免导致性能问题的内在原因;   包括3个点    1.pl/sql 程序占用cpu情况    2.pl/sql 程序占用内存情况    3.pl/sqk 程序占用i/情况

oypj2010的专栏 816

2020计算机专业保研夏令营面经:中科院计算所网数机试题目

计算所网络数据科学与技术重点实验室的第一阶段是机试。机试不限程序语言,要求提交源代码。

乔卿的博客 2957

pl/sql优化小知识点

1.选择最有效的表名顺序 oracle的解析器按照从右到左的顺序处理from子句中的表名,因此写在from子句最后的表(基础表,drivingtable)将被最先处理。在from子句中包含多个表的情况下,你必须选择记录条数最少的表作为基础表。 2.where子句中的连接顺序 oracle采用自下而上的顺序解析where子句,根据这个原理,表之间的连接必须写在其他where条件之前。 3.s

热恋oracle的博客 1289

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

PL/SQL性能优化工具profiler的部署和使用

<br />摘要... 2<br />PL/SQL性能优化工具profiler的部署和使用... 2<br />产品名称,产品版本... 2<br />适用平台... 2<br />创建及维护日期... 2<br />引言... 2<br />执行环境:... 2<br />访问权限:... 3<br />用法... 3<br />简介... 3<br />描述... 3<br />先决条件... 3<br />附录1 调用范例... 4<br />测试过程创建... 4<br />调用过程脚本... 5<

47522341的专栏 5135

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Oracle PL/SQL 编程入门:第二十四章 优化PL/SQL

在这一章中,我们深入探讨了如何。

caifox的博客 404

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

如何优化PL/SQL

(Walter Fan Fetched from Oracle 9i performance Tuning Tips & Techniques Richard J.Niemiec)1. 利用DBMS_APPLICATION_INFO进行实时监控DECLARE lv_count_num PLS_INTEGER:=0; lv_start_time_num PLS_INTEGER;BEGIN2.在数据库

温故而知新 1815

PL/SQL优化规则小结

 PL/SQL优化规则小结 注:O代表比X 更优化的写法。以下只是本人知道的一些基本的SQL优化,我更希望能从网友你们那里学习到更多的、更好的优化办法,提高自己的SQL编写能力。另外,有什么oracle管理、oracle编程方面的好书能够给予推荐一下吗? 1、尽量避免对索引列进行计算 例:X    WHERE sa*1.1>950O    WHERE sa>

无名小卒 1175

PL/SQL语言的测试流程优化

在现代数据库应用开发中,PL/SQL(Procedural Language/SQL)因其强大的数据处理能力和与Oracle数据库的深度集成,常常成为企业级应用的首选。然而,随着应用规模的扩大和业务逻辑的复杂化,PL/SQL代码的质量和可维护性也逐渐成为了开发者和管理者关注的重点。本文将深入探讨PL/SQL语言的测试流程,并提出一系列优化策略,以提高测试效率和代码质量。

2501_91009330的博客 487

《Oracle PL/SQL实例精讲》学习笔记26——优化PL/SQL(第二部分——PL/SQL优化级别)

本章内容: 1. PL/SQL调优工具 2. PL/SQL优化级别 3. 子程序内联   代码如下: 1. 查看PROFTAB.sql内容 Rem Rem $Header: plsql/admin/proftab.sql /main/4 2013/07/08 10:56:15 sylin Exp $ Rem Rem proftab.sql Rem Rem Copyright (c)...

预见未来to50的专栏 455
上一篇: sql hint 的作用
下一篇: java interview links
fromdw
博客等级 码龄20年 14粉丝 25原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值