`

Oracle数据库性能调优

 
阅读更多
一. SQL优化
1. Where中条件语句的放置顺序:
Oracle是自后向前解析,所以要把能过滤掉最大记录数的条件放在最后面。例如“主键ID=?”这样的条件。

2. select语句中不要使用*
Oracle在解析时,会把*转换成所有的列名,这个工作是通过查询数据字典完成的,这会耗费更多的时间。

3. 使用索引:
使用索引的好处:可提高查询的效率
使用索引的坏处:索引需要空间来存储,也需要花费代价来维护:每当有记录增减时,索引本身也需要被修改。所以不必要的索引反而是反应时间变慢。

使用索引需要注意的地方:
1)避免在索引列上使用NOT或函数
Not的副作用和函数相同,Oracle系统发现Not,就会停止使用索引而执行全表扫描。

2)避免在索引列上使用计算
例如:我们对sal列建立了索引
低效:select ... from dept where sal * 12 < 25000;
高效:select ... from dept where sal < 25000 / 12;
如果对索引列使用计算,Oracle将不使用索引而使用全表扫描

3)避免在索引列上使用is null或is not null
不要对可以为空的列建立索引。
如果我们对可以为空的列建立了索引,那么Oracle的索引对于该条为null的记录将不起作用:
a) 对于单列索引,如果包含null值,索引中将不存在此记录
b) 对于多列索引,如果至少有一列不为null, 则该条记录将记录在索引中,且Oracle不允许插入重复的记录。
例如,A,B两列作为索引,表中存在一条记录(123, null),Oracle将不再接受下一条记录(123, null). 但如果表中已有记录(null, null), 则Oracle允许下一条记录(null, null),因为Oracle规定null != null.
一句话概括,null值不会存储在索引中。
低效:(索引失效):select ... from dept where dept_code is not null;
高效:select ... from dept where dept_code >= 0;

4) 使用通配符%会使Oracle索引失效
低效:(索引失效):select ... from dept where dept_code like '%12345%';
高效:select ... from dept where dept_code like '12345';

5) 避免改变索引的类型:
如果dept_code是数值型
select ... from emp where empno = '123';
实际上,Oracle会转换成:select ... from emp where empno = TO_NUMBER('123'), 这样幸运的是,转换函数没有发生在索引列上,所以索引仍然有效。
但对于:emp_type是varchar2类型的时候:
select ... from emp where emp_type=123 将被换换成: select ... from emp where TO_NUMBER(emp_type)=123; 这时索引将失效,因为对于Oracle, 当字符和数值比较时,会优先将字符型转成数值型。

6)如果查询的数据量超过全表数据的30%, 那么即使使用索引也没有显著的提高

除了使用索引,我们还有其他能减少资源消耗的方法:
1. 用exist替换distinct
低效:select distinct dept_no, dept_name from dept d, emp e where d.dept_no=e.dept_no and e.sex=man;
高效:select dept_no, dept_name from dept d where exist (
select 'X' from emp e where e.dept_no=d.dept_no and e.sex=man
      );
对于"一对多"的表,如(部门表和员工表),exist效率更高,因为oracle将在子查询条件一旦满足后,立刻返回结果。

2. 用(union) union all替换or (只适用于多个索引列)
低效:select loc_id, loc_desc, region from location where loc_id=10 or region='beijing';
高效:select loc_id, loc_desc, region from location where loc_id=10 union all
select loc_id, loc_desc, region from location where region='beijing';

当loc_id和retion是联合索引的时候,如果使用or,索引将失效。

3. order by要加在索引列上,最好是主键上。
例如:dept_code是索引列
低效:select dept_code from dept order by dept_type;
高效:select dept_code from dept order by dept_code;

4. 避免使用耗费资源的操作
如果SQL中带有distinct, union, minus, intersect,则会启动SQL引擎,执行耗费资源的排序功能。

5. 使用where替代having (如果可以的话)
低效:select job, avg(sal) from emp group by job having job='aaa' and avg(sal)>100;
高效:select job, avg(sal) from emp where job='aaa' group by job having avg(sal)>100;
在执行group by之前,先用where过滤掉一部分记录。

6. 尽量避免使用子查询。
因为子查询的代价是比较昂贵的。

=========================
Oracle索引学习:
索引分类:
1. 按存储方式分类:
1) B树索引:B-tree索引是最常用的索引。其存储结构类似于书的索引。有分支和叶两种类型的存储数据块。分支块相当于书的大目录,叶块相当于索引到具体的书页。一般索引和唯一约束索引都是b-tree索引。
2) 位图索引:该索引主要为了节省空间,减少Oracle对于数据库的访问。采用位图索引一般是针对重复值太多的表字段。

2. 按功能分:
1)唯一索引:唯一索引有两个作用:一是数据约束(数据唯一),而是数据索引(索引中每一条记录对应一个唯一的rowId)
2)主关键字索引:同唯一索引
3)一般索引:一般索引不会产生数据约束的作用。

3. 按索引对象分类:
1)单列索引(表单个字段的索引)
2)多列索引(表多个字段的索引)
3)函数索引(对字段进行函数运算的索引)

索引优点:在数据量大时,查询效率更高,因为排序了
索引缺点:查询时需要排序,增加了排序开销。
当修改需求大于检索需求时,不需要建索引。
分享到:
评论

相关推荐

    oracle 数据库性能调优

    ### Oracle数据库性能调优:深度解析与实践指南 在企业级应用中,Oracle数据库作为核心的数据存储和处理系统,其性能直接影响着业务的流畅性和效率。因此,掌握Oracle数据库的性能调优技巧,对于DBA(数据库管理员...

    ORACLE数据库性能调优.docx

    Oracle数据库性能调优是DBA日常工作中至关重要的任务,它涉及到多个层面的分析和改进。在面对应用程序响应缓慢的问题时,通常需要从数据库层面、操作系统层面以及SQL查询优化三个方面进行深入排查。 首先,关注操作...

    oracle数据库性能调优和监控

    【Oracle数据库性能调优与监控】是数据库管理中至关重要的环节,主要目的是提高系统的吞吐量,缩短反应时间,从而提升整体性能。吞吐量衡量的是单位时间内数据库处理的SQL语句数量,而反应时间则关注用户等待结果的...

    Oracle数据库性能调优的研究.pdf

    Oracle数据库性能调优是一个系统工程,涉及到硬件资源、软件配置、数据库结构以及应用程序等多个层面。以下是对Oracle数据库性能影响因素及性能调优方法的知识点总结。 1. Oracle数据库性能影响因素 硬件因素: ...

    oracle数据库性能调优(3)

    本篇将继续深入探讨Oracle数据库性能调优的诸多方面,重点关注于嵌套循环执行计划,这是数据库多表操作中常见的连接方式之一。 首先,了解单表执行计划是理解多表执行计划的基础,单表执行计划涉及到了对单个表进行...

    Oracle数据库性能调优研究.pdf

    Oracle数据库性能调优是数据库管理的关键环节,旨在提高数据处理速度和系统响应时间,从而提升整体应用系统的效率。本文主要探讨了几个关键的调优策略。 首先,日志管理是数据库性能的重要因素。日志文件包含了...

    ORACLE数据库性能调优视频教程详细完整版

    内容包括: 第一章:oracle资源管理 第二章:oracle任务调度 ...第十章:性能调优好框架。 由于文件过大,只提供百度网盘下载地址和提取码,请放心下载。 信誉第一,如有任何问题,可以给我发私信或者评论区留言

    浅谈Oracle数据库性能调优.pdf

    【Oracle数据库性能调优】是IT领域中针对大型企业级应用的重要话题,Oracle数据库作为广泛使用的的关系型数据库管理系统,其性能优化直接关系到系统运行效率和用户体验。本文将深入探讨影响Oracle数据库性能的关键...

    oracle 数据库性能调优技术 2 中文

    ### Oracle数据库性能调优技术之深入理解单表执行计划 #### 概述 在数据库管理与维护工作中,性能调优是一项关键技能。特别是在大型企业级应用中,Oracle数据库的性能直接影响到系统的整体运行效率和用户体验。...

    上海港浦集公司ORACLE数据库性能调优.pdf

    Oracle数据库性能调优是确保系统高效稳定运行的关键环节,尤其对于像上海港浦集公司的集装箱生产系统这样的实时系统,后台数据库的性能直接影响整个系统的运行状况。由于系统是24小时不间断运行,数据库性能的降低会...

    Oracle数据库性能调优务实课件1-5

    本课程围绕"Oracle数据库性能调优务实课件1-5"展开,旨在深入理解并实践Oracle数据库的性能优化技术。 在"Oracle性能优化概述"中,我们首先会学习到性能调优的重要性以及它对业务运行效率的影响。课程可能涵盖如何...

    Oracle数据库性能调优的研究 (2).pdf

    Oracle数据库性能调优是数据库管理的关键环节,直接影响到数据库应用系统的效率和稳定性。本文主要探讨了Oracle数据库性能优化的策略、目标以及优化方法,并详细介绍了Oracle数据库的诊断和调优工具。 首先,Oracle...

    oracle 数据库性能调优技术 3 中文

    ### Oracle数据库性能调优技术——深入理解嵌套循环执行计划 #### 一、概述 本文是关于Oracle数据库性能调优技术系列文章的第三篇。在前一篇中,我们详细探讨了单表执行计划的重要性及其对多表执行计划理解的基础...

    Oracle 数据库性能调优的一些经验与体会.doc

    Oracle数据库性能调优是数据库管理员(DBA)的关键任务,旨在最大化系统效率并最小化响应时间。本篇文章基于HP8500服务器上的Oracle 9i数据库管理经验,分享了性能调优的方法和系统参数调整的原则。 首先,优化设计...

    浅谈Oracle数据库性能调优 (2).pdf

    Oracle数据库性能调优是一个DBA(数据库管理员)的重要任务,其目的是提升数据库的运行效率,降低存储空间占用,并优化查询性能。本文将围绕Oracle数据库的性能优化方法展开讨论,主要关注数据库系统的内存优化和...

    Oracle数据库性能调优技术与实现 (2).pdf

    Oracle数据库性能调优技术与实现 Oracle数据库作为目前最流行的数据库管理系统之一,广泛应用于大型数据库应用系统中。由于其市场占有率高,以及具有众多高端用户,对于Oracle数据库的性能调优研究具有重要的现实...

    ORACLE数据库性能调优研究——以天津东方海陆公司为例.pdf

    【Oracle数据库性能调优】是确保企业信息系统稳定高效运行的关键技术。随着企业对Oracle数据库的依赖加深,数据库的性能调优变得尤为重要。天津东方海陆集装箱码头有限公司的案例表明,对于24小时不间断运行的生产...

    oracle 数据库性能调优技术 1 中文

    ### Oracle数据库性能调优技术——索引调优 #### 一、概述 随着信息技术的快速发展,数据库在各行各业的应用越来越广泛,对于高性能的需求也随之增加。**数据库性能调优**是一项复杂而又重要的任务,它旨在通过一...

    oracle数据库性能调优(2)

    数据库性能调优是知识密集型的学科,需要综合考虑各种复杂的因素:数据库缓冲区的大小、索引的创建、语句改写等等。总之,数据库性能调优的目的在于使系统运行得更快。数据库调优技术可以在不同的数据库系统中使用。...

Global site tag (gtag.js) - Google Analytics