1、不要用 '*' 代替所有列名,特别是字段比较多的情况下

  使用select * 可以列出某个表的所有列名,但是这样的写法对于Oracle来说会存在动态解析问题。Oracle系统通过查询数据字典将 '*' 转换成表的所有列名,这自然会消耗系统时间。

  2、进行全表删除时,用truncate代替delete

  当用delete删除表的数据行时,Oracle会使用撤销表空间(UNDO tablespace)来存放恢复的信息。在这期间,如果用户没有发出commit语句,而是发出rollback语句,Oracle系统会将数据恢复到删除之前的状态,当用户使用truncate对表的数据进行删除时,系统不会将被删除的数据写到回滚段(撤销表空间)里,速度自然快些。

  3、在确保完整性的情况下多使用commit

  在PL/SQL块中,经常将几个相互联系的DML语句写到一个BEGIN...END块中,建议在每个DML语句结尾加上commit,这样可以使用对象DML语句及时提交,同时也释放事务所占用的资源。

  4、尽量减少表的查询次数

  在含有多个子查询的sql中,要注意减少对表的查询。
  示例:

    --Inefficient sql
select tab_name1,tab_name2 from table_name
where tab_name1 = (select tab_n1 from table_n)
and tab_name2 = (select tab_n2 from table_n)
--Efficient sql
select tab_name1,tab_name2 from table_name
where (tab_name1,tab_name2)= (select tab_n1,tab_n2 from table_n)

  5、使用exists代替in,使用not exists代替not in

  在子查询中,in使用一个内部的排序和合并,无论在哪种情况下,not in都是最低效的,因为它对子查询中的表执行了全表遍历,为了避免使用not in,我们可以把它改写为外连接(outer join)或者是not exists。但并不代表not in 完全不可用,我们一分为二来看待此问题:若子查询返回的数据集较复杂,避免使用not in;当子查询返回的数据集较简单或者可枚举,not in也可以使用。

  exists和in使用同理。

  6、合理使用函数

  不合理的函数使用方式会对数据库造成严重的性能问题,即使一个非常简单的函数,因为其使用不当,都可能造成严重的后果。

  示例:

    --Inefficient sql
for i in 0...10 LOOP
select count(*) into i_cnt from race_results
where horse_name = format_name('xiaobai');
end LOOP;
--Efficient sql
for i in 0...10 LOOP
select count(*) into i_cnt from race_results
where horse_name = (select format_name('xiaobai') from dual);
end LOOP;

  当函数在where子句中使用时,查询结果得到的每一行记录均会调用该函数一次。

  7、正确选择from表顺序

  在基于规则的优化器(Rule-based Optimizer)下,Oracle解析器按照从右至左的顺序处理from后的表名,因此写在from中最后的表将会被先处理,先处理的表也称为驱动表,在from子句中包含多个表的情况下,建议选择数据量最少的表作为驱动表。原因:当Oracle处理多个表时,会运用排序或合并的方式连接它们。首先,系统扫描from中最后的表,并对该表的数据进行排序;然后,扫描from中倒数第二个表;最后,将所有从第二个表中检索出来的记录和第一个表中的合适记录进行合并,取交集。

  如果有三个以上的表连接,则建议使用交叉表(intersection table)作为驱动表,所谓交叉表指的是被其他表所引用的表。

  8、where子句条件的连接顺序

  Oracle采用自下而上顺序解析where子句,按照这个原理,表连接的条件必须写在其他条件之前,那些能过滤掉最大记录的条件必须写在where子句的末尾,也就是表在连接操作以前,能过滤的数据量越大越好。

Oracle sql 优化の常用方式的更多相关文章

  1. oracle sql 优化大全

    转自: http://panshaobinsb.iteye.com/blog/1718233 http://yulimeander.blog.sohu.com/115850824.html 最近遇到了 ...

  2. Oracle SQL优化[转]

    Oracle SQL优化 1. 选用适合的ORACLE优化器 ORACLE的优化器共有3种: a. RULE (基于规则) b. COST (基于成本) c. CHOOSE (选择性) 设置缺省的优化 ...

  3. Oracle-01-数据库分类/oracle sql*plus常用命令

    一.数据库分类 一.数据库分类1.小型数据库:access.foxbase2.中型数据库:informix.sql server.mysql3.大型数据库:sybase.db2.oracle 二.项目 ...

  4. Oracle SQL优化进阶学习

    引言 对于下面的Oracle分页如何优化该段语句: SELECT * FROM (SELECT A.*, ROWNUM RN FROM (SELECT * FROM task_log order by ...

  5. Oracle SQL 优化原则(实用篇)

    由于SQL优化优化起来比较复杂,并且还受环境限制,在开发过程中,写SQL必须遵循以下几点原则: 1.Oracle 采用自下而上的顺序解析WHERE子句,根据这个原理,表之间的连接必须写在其他Where ...

  6. oracle sql优化

    整理一下网上所看到sql优化方法 1.使用大写字母书写sql,因为oracle解释器会先将sql语句转换成大写后再解释 2    减少访问数据库的次数,多数情况下一条sql可以达到目的的,就不要使用多 ...

  7. Oracle SQL优化一(常见方法)

    1.表访问方式优化: a)普通表优先“Index Lookup 索引扫描”,避免全表扫描 大多数场景下,通过“Index Lookup 索引扫描”要比“Full Table Scan (FTS) 全表 ...

  8. Oracle SQL优化器简介

    目录 一.Oracle的优化器 1.1 优化器简介 1.2 SQL执行过程 二.优化器优化方式 2.1 优化器的优化方式 2.2 基于规则的优化器 2.3 基于成本的优化器 三.优化器优化模式 3.1 ...

  9. Oracle SQL优化原则

    原文:http://bbs.landingbj.com/t-0-240353-1.html 1.选用适合的 ORACLE 优化器 2.访问 Table 的方式 3.共享SQL语句 共享的语句必须满足三 ...

随机推荐

  1. python格式化输出(转)

    在许多编程语言中都包含有格式化字符串的功能,比如C和Fortran语言中的格式化输入输出.Python中内置有对字符串进行格式化的操作%. 模板 格式化字符串时,Python使用一个字符串作为模板.模 ...

  2. Java发送HTTPS请求

    前言 上篇文章介绍了 java 发送 http 请求,大家都知道发送http是不安全的 .我也是由于对接了其他企业后总结了一套发送 https的工具.大家网上找方法很多的,但是可不是你粘过来就能用啊, ...

  3. Jmeter分布式

    Jmeter运行时十分耗CPU和内存,在实际应用中有时一台机器不能满足测试要求,这时就需要利用多台机器来进行分布式.   Jmeter分布式的测试框架:框架中所有的测试脚本都要从测试主机传送到测试从机 ...

  4. Struct2总结

    摘自<javaWeb整合开发王者归来> 一.Struct2工作流程 1.访问jsp页面  /struts2/login.jsp 2.提交表单后数据提交给 /struts2/loginPer ...

  5. in文件注意事项及详细解释

    lammps做分子动力学模拟时,需要一个输入文件(input script),也就是in文件,以及关于体系的原子坐标之类的信息文件(data file)和势文件(potential file).lam ...

  6. Poor Warehouse Keeper

    Poor Warehouse Keeper http://acm.hdu.edu.cn/showproblem.php?pid=4803 Jenny is a warehouse keeper. He ...

  7. vue2.0 element学习

    1,bootstrap和vue2.0结合使用 vue文件搭建好后,引入jquery和bootstrap 我采用的方式为外部引用 在main.js内部直接导入 用vue-cli直接安装jquery和bo ...

  8. 品味性能之道<六>:图形化SQL分析工具

         在上一章里,重点分享了命令行SQL分析工具的使用方法.在本章将重点分享PL/SQL的SQL分析工具. 一.如何打开PL/SQL执行计划      开启PL/SQL这工具,推荐如下方法: 点击 ...

  9. dump打印

  10. struts2 的 ServletActionContext 和 actionContext,服务器代码测试, redirect 、dispatcher、chain、redirectAction

    一.ServletActionContext  和 actionContext HttpServletRequest request=ServletActionContext.getRequest() ...