本文内容摘自《剑破冰山——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 开发性能漫谈的更多相关文章

  1. 提升 Web开发性能的 10 个技巧

    随着网络的高速发展,网络性能的持续提高成为能否在芸芸App中脱颖而出的关键.高度联结的世界意味着用户对网络体验提出了更严苛的要求.假如你的网站不能做到快速响应,又或你的App存在延迟,用户很快就会移情 ...

  2. 转——Android应用开发性能优化完全分析

    [工匠若水 http://blog.csdn.net/yanbober 转载请注明出处.] 1 背景 其实有点不想写这篇文章的,但是又想写,有些矛盾.不想写的原因是随便上网一搜一堆关于性能的建议,感觉 ...

  3. Android 应用开发性能优化完全分析

    1 背景 其实有点不想写这篇文章的,但是又想写,有些矛盾.不想写的原因是随便上网一搜一堆关于性能的建议,感觉大家你一总结.我一总结的都说到了很多优化注意事项,但是看过这些文章后大多数存在一个问题就是只 ...

  4. 【转】Android应用开发性能优化完全分析

    http://blog.csdn.net/yanbober/article/details/48394201 1 背景 其实有点不想写这篇文章的,但是又想写,有些矛盾.不想写的原因是随便上网一搜一堆关 ...

  5. Android应用开发性能优化完全分析

    1 背景 其实有点不想写这篇文章的,但是又想写,有些矛盾.不想写的原因是随便上网一搜一堆关于性能的建议,感觉大家你一总结.我一总结的都说到了很多优化注意事项,但是看过这些文章后大多数存在一个问题就是只 ...

  6. 如何提升 CSS 选择器性能

    CSS 选择器性能损耗来自? CSS选择器对性能的影响源于浏览器匹配选择器和文档元素时所消耗的时间,所以优化选择器的原则是应尽量避免使用消耗更多匹配时间的选择器.而在这之前我们需要了解CSS选择器匹配 ...

  7. Android开发性能优化总结(一)

    安卓开发应用首先要讲究良好的用户体验,如果一款软件卡顿现象严重,不流畅,经常崩溃,那么将给用户带来极不良好的体验,从而损失用户. 在实际开发和学习中,我总结了一下关于安卓性能的优化,供大家参考交流. ...

  8. 转:Android应用开发性能优化完全分析

    转自:http://blog.csdn.net/yanbober/article/details/48394201 1 背景 其实有点不想写这篇文章的,但是又想写,有些矛盾.不想写的原因是随便上网一搜 ...

  9. 提升 CSS 选择器性能的方法

    CSS 选择器性能损耗来自? CSS选择器对性能的影响源于浏览器匹配选择器和文档元素时所消耗的时间,所以优化选择器的原则是应尽量避免使用消耗更多匹配时间的选择器.而在这之前我们需要了解CSS选择器匹配 ...

随机推荐

  1. Swift 加载 xib 崩溃问题

    新版本用 Swift开发 遇到的坑 解决方法

  2. PHP获取时间戳和微秒数以及生成唯一ID

    microtime函数 描述:返回当前Unix时间戳和微秒数 语法:mixed microtime( [ bool $get_as_float ] ) //直接输出 echo microtime(); ...

  3. css隐藏多余的文字并出现省略号

    <meta charset="utf-8" /> <style> .txt{ width:200px; border:1px solid #ddd; ove ...

  4. go语言的运算符

    什么是运算符:运算符用于在程序运行时执行数学或逻辑运算 go语言的运算符如下: 算术运算符 关系运算符 逻辑运算符 位运算符 赋值运算符 其他运算符 一,算数运算符 运算符 描述 实例 + 相加 A ...

  5. 2019.03.29 bzoj5463: [APIO2018] 铁人两项(圆方树+树形dp)

    传送门 题意简述:给你一张无向图,问你满足存在从a−>b−>ca->b->ca−>b−>c且不经过重复节点的路径的有序点对(a,b,c)(a,b,c)(a,b,c) ...

  6. selenium之复选框操作

    HTML源码: <!DOCTYPE html> <div lang="en"></div></div> <head> & ...

  7. Python开发——12.socket编程

    一.OSI七层 1.物理层 物理层的主要功能是基于电气特性发送高低电压(高代表1,低代表0)形成电信号,使计算机完成组网以达到接入Internet的目的 2.数据链路层 数据链路层是用来定义电信号的分 ...

  8. 底图与蒙版的过渡效果transition

    我用2种方法写了底图与蒙版的过渡效果 方法一:用js方法 <!DOCTYPE html> <html> <head> <meta http-equiv=&qu ...

  9. vue的指令

    我之前学了学angular 发现angular和vue的指令有点类似 先说一下 new  Vue({          el: "#box", // element(元素) 当前作 ...

  10. 手机端-万种bt在线观看器,安卓正版下载!

    安卓正版下载, 点击下载 无广告,完全免费!寻找任何你想要的资源!