提升 PLSQL 开发性能漫谈
本文内容摘自《剑破冰山——Oracle开发艺术》一书,有删改。
1、触发器尽量考虑内部代码过程封装(解析次数)
2、避免动态 SQL
动态 SQL 和普通 SQL 在执行过程中最大的差别在于:动态 SQL 是在执行过程中编译,而普通 SQL 是在过程执行前就已经编译过了。如果过程中有大量动态 SQL,且执行很频繁,可以预计系统将会出现大量重新编译解析的工作;而普通 SQL 在过程执行的时候已经编译过了,就是所谓的一次编译多次执行,效率无疑会高出许多。
3、OLTP 系统中尽量使用绑定变量,而 OLAP 不宜使用绑定变量
OLTP 系统的特点是 SQL 执行非常频繁,并且用时非常短,此时共享池的重用执行计划减少硬解析所省下的时间相对就非常客观了。SQL 语句在共享池中解析是比较复杂的,将会完成逻辑优化、物理优化、生成计划等一系列动作。大多数 OLTP 系统运用中,解析用时会占 SQL 执行总用时的很大比例,因此不容忽视。使用绑定变量后,文本内容大体一致仅变量值不同的 SQL 语句会被共享池认为是同一 SQL 语句;而未绑定变量的程序语句中有多少次循环就会产生多少次硬解析。
4、减少对 SYSDATE 的调用
SYSDATE 函数在 Oracle SQL 开发中被大量使用,但它毕竟是函数(会产生额外的开销),如果频繁调用必然会对系统产生一定的影响,因此要有意识的避免直接调用这类函数。
5、避免对 MOD 函数的调用
某些 PL/SQL 函数在使用时比其他函数的开销要大得多,MOD 就是这种函数,可能是由于 Oracle 考虑了太多算法而性能较差,自定义逻辑往往更快,应减少使用。
6、设法减少表扫描次数
7、避免 SQL 中的函数调用
一般而言,在 SQL 编码中,尽量避免在 SQL 中进行函数调用,因为这样会产生大量递归调用而影响性能。多数情况下 SQL 中的函数调用都是多余的,如果用表关联连替代函数调用,往往是更高效的。
8、尽量用简单 SQL 替代 PL/SQL 逻辑
保持简单是一个非常朴素的理论。在实践中发现,写代码时有意识的注意到简单两字,将给系统性能带来极大好处。“尽可能利用 Oracle 提供的现有功能,用最简单的方式完成数据库逻辑”如果可以用一条简单 SQL 语句完成的逻辑,就避免将该 SQL 语句写得太过复杂,只有单条 SQL 语句无法实现业务逻辑时,才考虑使用存储过程。简化 SQL 语句是要有充分技巧的,需要开发人员不断加强对 Oracle 开发知识的学习和理解。(MERGE、INSERT ALL、WITH)
9、避免不必要的排序
排序是一种极耗资源的操作,在开发过程中,尽量避免不必要的排序,在不可避免的情况下,也尽可能利用索引本身有序的特性。
10、利用 Oracle 现有功能
自治事务、序列、临时表(create global temporary table)不要费尽心思去实现 Oracle 已经提供的功能。
11、使用 PLS_INTEGER 类型
在进行大批量的整数运算时,使用 PLS_INTEGER 类型比使用 NUMBER 类型的效率明显要高。
12、避免数据类型转换
经验不足的开发人员在代码中不会注意数据类型的一致性,进而会导致系统性能低下。数据类型转换需要额外开销,甚至会导致无法使用索引,因此需要确保比较运算中的数据类型相同。
13、IF 的顺序有讲究
根据条件出现的频率来排序 IF 条件,将大概率出现的条件放在前面。
14、设计开发对列是否为空慎重决定
观察到周围设计开发人员在进行表结构设计时,对表字段是否为空比较随意,其实这在开发中是要引起重视的。
15、分布式开发不可不知的 HINT(driving_site)
本文链接:http://www.cnblogs.com/hanzongze/p/oracle-sql-performance.html
版权声明:本文为博客园博主 韩宗泽 原创,作者保留署名权!欢迎通过转载、演绎或其它传播方式来使用本文,但必须在明显位置给出作者署名和本文链接!个人博客,能力有限,若有不当之处,敬请批评指正,谢谢!
提升 PLSQL 开发性能漫谈的更多相关文章
- 提升 Web开发性能的 10 个技巧
随着网络的高速发展,网络性能的持续提高成为能否在芸芸App中脱颖而出的关键.高度联结的世界意味着用户对网络体验提出了更严苛的要求.假如你的网站不能做到快速响应,又或你的App存在延迟,用户很快就会移情 ...
- 转——Android应用开发性能优化完全分析
[工匠若水 http://blog.csdn.net/yanbober 转载请注明出处.] 1 背景 其实有点不想写这篇文章的,但是又想写,有些矛盾.不想写的原因是随便上网一搜一堆关于性能的建议,感觉 ...
- Android 应用开发性能优化完全分析
1 背景 其实有点不想写这篇文章的,但是又想写,有些矛盾.不想写的原因是随便上网一搜一堆关于性能的建议,感觉大家你一总结.我一总结的都说到了很多优化注意事项,但是看过这些文章后大多数存在一个问题就是只 ...
- 【转】Android应用开发性能优化完全分析
http://blog.csdn.net/yanbober/article/details/48394201 1 背景 其实有点不想写这篇文章的,但是又想写,有些矛盾.不想写的原因是随便上网一搜一堆关 ...
- Android应用开发性能优化完全分析
1 背景 其实有点不想写这篇文章的,但是又想写,有些矛盾.不想写的原因是随便上网一搜一堆关于性能的建议,感觉大家你一总结.我一总结的都说到了很多优化注意事项,但是看过这些文章后大多数存在一个问题就是只 ...
- 如何提升 CSS 选择器性能
CSS 选择器性能损耗来自? CSS选择器对性能的影响源于浏览器匹配选择器和文档元素时所消耗的时间,所以优化选择器的原则是应尽量避免使用消耗更多匹配时间的选择器.而在这之前我们需要了解CSS选择器匹配 ...
- Android开发性能优化总结(一)
安卓开发应用首先要讲究良好的用户体验,如果一款软件卡顿现象严重,不流畅,经常崩溃,那么将给用户带来极不良好的体验,从而损失用户. 在实际开发和学习中,我总结了一下关于安卓性能的优化,供大家参考交流. ...
- 转:Android应用开发性能优化完全分析
转自:http://blog.csdn.net/yanbober/article/details/48394201 1 背景 其实有点不想写这篇文章的,但是又想写,有些矛盾.不想写的原因是随便上网一搜 ...
- 提升 CSS 选择器性能的方法
CSS 选择器性能损耗来自? CSS选择器对性能的影响源于浏览器匹配选择器和文档元素时所消耗的时间,所以优化选择器的原则是应尽量避免使用消耗更多匹配时间的选择器.而在这之前我们需要了解CSS选择器匹配 ...
随机推荐
- python语法之函数2
高阶函数: def f(n): return n*n def foo(a,b,func): func(a)+func(b) ret=func(a)+func(b) return ret foo(1,2 ...
- Python从入门到精通之Sixth!
补充:enumerate 函数用于遍历序列(元组tuple.列表list.字典dict)中的元素以及它们的下标: >>> for i,j in enumerate(('a','b', ...
- CSS基础一
css作用 css将内容和样式相分离,便于修改样式.HTML 写网页的内容,CSS写内容的样式 CSS构成 p{ /*p为标签,也可以称为选择器,选择包住的内容的格式*/ font-size:12px ...
- xml文档格式学习笔记
xml入门经典 (pdf书籍) https://www.cnblogs.com/zhaopengcheng/p/6848802.html
- tomcat配置层了解一下 idea打包 java打包部署
Tomcat的所有配置都放在conf文件夹之中,里面的server.xml文件是配置的核心文件. 如果想修改Tomcat服务器的启动端口,则可以在server.xml配置文件中的Connector节点 ...
- spring BeanWrapperImpl方便的嵌套属性(list)操作
beans 包主要提供了接口和类用于处理java beans. 其中最主要的接口是BeanWrapper: Spring 的中心接口,用于访问javabeans 的低层操作.默认实现为 ...
- Exp6 信息搜集与漏洞扫描——20164325王晓蕊
1.实践目标 掌握信息搜集的最基础技能与常用工具的使用方法. 2.实践内容 2.1 各种搜索技巧的应用 2.1.1 Netcraft查询 Netcraft这个网站可以查询到特定网站的IP地址,以wei ...
- js every some 遍历函数理解
1.every let arr = [0, 1, 2, 3, 4, 5]; let result = arr.every((item, index) => { return item >= ...
- 从零起步做到Linux运维经理, 你必须管好的23个细节
“不想成为将军的士兵,不是好士兵”-拿破仑 如何成为运维经理? 一般来说,运维经理大概有两种出身:一种是从底层最基础的维护做起,通过出色的维护工作,让公司领导对这个人非常认可,同时对Linux运维工作 ...
- 升讯威微信营销系统开发实践:(1)功能概要与架构设计( 完整开源于 Github)
GitHub:https://github.com/iccb1013/Sheng.WeixinConstruction因为个人精力时间有限,不会再对现有代码进行更新维护,不过微信接口比较稳定,经测试至 ...