`

oracle查询性能优化

阅读更多
1、实用不等于操作符(<>, !=) 下面这种情况,即使在列dept_id有一个索引,查询语句仍然执行一次全表扫描
  select * from dept where staff_num <> 1000;
  但是开发中的确需要这样的查询,难道没有解决问题的办法了吗?
  有!
  通过把用 or 语法替代不等号进行查询,就可以使用索引,以避免全表扫描:上面的语句改成下面这样的,就可以使用索引了。
  select * from dept shere staff_num < 1000 or dept_id > 1000;

2、使用 is null 或 is not null 使用
  is null 或is nuo null也会限制索引的使用,因为数据库并没有定义null值。如果被索引的列中有很多null,就不会使用这个索引(除非索引是一个位图索引,关于位图索引,会在以后的blog文章里做详细解释)。在sql语句中使用null会造成很多麻烦。
  解决这个问题的办法就是:建表时把需要索引的列定义为非空(not null)

3、使用函数
  如果没有使用基于函数的索引,那么where子句中对存在索引的列使用函数时,会使优化器忽略掉这些索引。下面的查询就不会使用索引:
  select * from staff where trunc(birthdate) = '01-MAY-82';
  但是把函数应用在条件上,索引是可以生效的,把上面的语句改成下面的语句,就可以通过索引进行查找。
  select * from staff where birthdate < (to_date('01-MAY-82') + 0.9999);

4、比较不匹配的数据类型 比较不匹配的数据类型也是难于发现的性能问题之一。下面的例子中,dept_id是一个varchar2型的字段,在这个字段上有索引,但是下面的语句会执行全表扫描。
  select * from dept where dept_id = 900198;
  这是因为oracle会自动把where子句转换成to_number(dept_id)=900198,就是3所说的情况,这样就限制了索引的使用。把SQL语句改为如下形式就可以使用索引
  select * from dept where dept_id = '900198';

5. 用EXISTS替代IN
在许多基于基础表的查询中,为了满足一个条件,往往需要对另一个表进行联接.在这种情况下, 使用EXISTS(或NOT EXISTS)通常将提高查询的效率.
12. 用NOT EXISTS替代NOT IN
在子查询中,NOT IN子句将执行一个内部的排序和合并. 无论在哪种情况下,NOT IN都是最低效的 (因为它对子查询中的表执行了一个全表遍历). 为了避免使用NOT IN ,我们可以把它改写成外连接(Outer Joins)或NOT EXISTS.

6. 删除重复记录
最高效的删除重复记录方法 ( 因为使用了ROWID)
DELETE FROM EMP E
WHERE E.ROWID > (SELECT MIN(X.ROWID)
FROM EMP X
WHERE X.EMP_NO = E.EMP_NO);

分享到:
评论

相关推荐

    Oracle查询性能优化

    1:注意WHERE子句中的连接顺序: 2: SELECT子句中避免使用 ‘ * ‘: 3、避免在索引列上使用IS NULL和IS NOT NULL 4、注意通配符%的影响 5、避免改变索引列的类型.: 6、索引的一些“脾气”

    ORACLE SQL性能优化系列

    ORACLE SQL性能优化系列 ORACLE SQL性能优化系列 ORACLE SQL性能优化系列

    oracle数据库性能优化.pdf

    oracle数据库性能优化.pdforacle数据库性能优化.pdforacle数据库性能优化.pdforacle数据库性能优化.pdforacle数据库性能优化.pdf

    Oracle数据库性能优化.pdf

    Oracle数据库性能优化.pdf

    Oracle数据库性能优化PDF

    资源名称:Oracle数据库性能优化 PDF内容简介:本书面向实际应用,从多个角度出发,对Oracle优化中的很多关键问题进行了深入全面的探讨,涵盖了Oracle优化的各个技术层面,从内存优化、IO规划及优化,到SQL优化调整...

    ORACLE SQL性能优化.chm

    ORACLE SQL性能优化.chm ORACLE SQL性能优化.chm ORACLE SQL性能优化.chm

    Oracle 高性能优化全攻略

    Oracle 高性能优化全攻略Oracle 高性能优化全攻略Oracle 高性能优化全攻略Oracle 高性能优化全攻略Oracle 高性能优化全攻略Oracle 高性能优化全攻略Oracle 高性能优化全攻略Oracle 高性能优化全攻略Oracle 高性能...

    EBS性能调优之全面挖掘_V4.2(ebs性能优化、oracle性能优化、linux性能优化)

    数据库优化包括:实例的性能优化和SQL语句的性能优化,实例优化和sql优化均可以通过AWR报告来分析并作出优化方案。 这篇文档描述了如何调查EBS系统性能下降原因、如何使用和理解AWR报告、分别阐述了数据库层/应用层/...

    Oracle查询优化改写技巧与案例

    , 如果您是开发人员,经常与Oracle打交道,那么《Oracle查询优化改写技巧与案例》可以帮助您处理复杂的需求,写出高性能的语句。如果您是运维人员,则《Oracle查询优化改写技巧与案例》可以帮助您更快地完成慢语句的...

    Oracle查询优化改写技巧与案例2.zip

    《Oracle查询优化改写技巧与案例》不讲具体语法,只是以案例的形式介绍各种查询语句的..., 如果您是开发人员,经常与Oracle打交道,那么《Oracle查询优化改写技巧与案例》可以帮助您处理复杂的需求,写出高性能的语句。

    Oracle企业DBA性能优化

    Oracle企业DBA性能优化 Oracle企业DBA性能优化 Oracle企业DBA性能优化 Oracle企业DBA性能优化

    Oracle 数据库性能优化的主要方法

    Oracle 数据库性能优化的主要方法

    oracle数据库性能优化 合集 中文

    oracle数据库性能优化 合集 包含文件11个文档 中文教程

    Oracle SQL性能优化总结

    简单的整理了一些Oracle性能优化方面的知识。 供大家参考学习。

    Oracle SQL性能优化技巧大总结

    Oracle SQL性能优化技巧大总结

    oracle性能优化

    oracle性能优化oracle性能优化oracle性能优化oracle性能优化oracle性能优化oracle性能优化oracle性能优化oracle性能优化

    Oracle 数据库性能优化

    Oracle数据库性能优化Oracle数据库性能优化Oracle数据库性能优化Oracle数据库性能优化Oracle数据库性能优化

    Oracle数据库性能优化实践指南

    Oracle数据库性能优化实践指南,压缩包文件,欢迎下载

Global site tag (gtag.js) - Google Analytics