`
chunchong
  • 浏览: 38757 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

ORACLE数据优化建议

阅读更多

一、            技术方面优化

1.  OracleINSTR代替LIKE。数据库对不了函数内部优化不同,在数据量小的时候看不出什么差别,但是在大数据量情况下效率差别较为明显。

2.  查询使用比较频繁的字段添加索引,默认索引不支持空值,若字段存在空值使用位图索引。当列中的值比较多而且重复较少的时候适合创建B树索引,当列中的值相对固定只有很小的集合供选择的时候适合的位图索引。

3.  OR条件连接能修改联合结果的最好修改为UNION ALL。同样IN条件能修改的也要进行修改。

4.  在数据库中,UNIONUNION ALL关键字都是将两个结果集合并为一个,但这两者从使用和效率上来说都有所不同。UNION在进行表链接后会筛选掉重复的记录,所以在表链接后会对所产生的结果集进行排序运算,删除重复的记录再返回结果。而UNION ALL只是简单的将两个结果合并后就返回。这样,如果返回的两个结果集中有重复的数据,那么返回的结果集就会包含重复的数据了。从效率上说,UNION ALL 要比UNION快很多,所以,如果可以确认合并的两个结果集中不包含重复的数据的话,那么就使用UNION ALL

5.  查询字段中包含查询条件,如:

 

SELECT (SELECT XXX FROM AAA A WHERE A.ID = B.PID) AS XX FROM BBB B;

 

类似这种写法进行了for循环嵌套,耗费资源较大,建议类似语句进行优化。

SELECT A.XXX AS XX FROM AAA A LEFT JOIN BBB B ON A.ID = B.PID;

  

 

 

6.  使用表的别名(Alias)
当在SQL语句中连接多个表时, 请使用表的别名并把别名前缀于每个Column.这样一来,就可以减少解析的时间并减少那些由Column歧义引起的语法错误。

 

7.  避免在索引列上进行计算。
WHERE
子句中,如果索引列是函数的一部分。优化器将无法使用索引从而使用全表扫描。

任何对列的操作都可能导致全表扫描,这里所谓的操作包括数据库函数、计算表达式等等,查询时要尽可能将操作移至等式的右边,甚至去掉函数。
举例::下列SQL条件语句中的列都建有恰当的索引,但30万行数据情况下执行速度却非常慢: 

SELECT * FROM RECORD WHERE SUBSTRB(CARDNO,1,4)='5378' (13秒) 
SELECT * FROM RECORD WHERE AMOUNT/30< 1000(11秒) 
SELECT * FROM RECORD WHERE TO_CHAR(ACTIONTIME,'YYYYMMDD')='19991201'(10秒)

 

由于where子句中对列的任何操作结果都是在SQL运行时逐行计算得到的,因此它不得不进行表扫描,而没有使用该列上面的索引;如果这些结果在查询编译时就能得到,那么就可以被SQL优化器优化,使用索引,避免表扫描,因此将SQL重写如下:
差别是很明显的!

 

SELECT * FROM RECORD WHERE CARDNO LIKE '5378%'(< 1秒)
SELECT * FROM RECORD WHERE AMOUNT < 1000*30(< 1秒)
SELECT * FROM RECORD WHERE ACTIONTIME= TO_DATE ('19991201' ,'YYYYMMDD')(< 1秒)

 

8.  避免不必要的类型转换

需要注意的是,尽量避免潜在的数据类型转换。如将字符型数据与数值型数据比较,ORACLE会自动将字符型用to_number()函数进行转换,从而导致全表扫描。

示例:

tab1中的列col1是字符型(char),则以下语句存在类型转换:

SELECT COL1,COL2 FROM TAB1 WHERE COL1>10;

###应该写为: 

SELECT COL1,COL2 FROM TAB1 WHERE COL1>'10';

 

 

 

 

 

9.  优化GROUP BY:

 

提高GROUP BY 语句的效率, 可以通过将不需要的记录在GROUP BY 之前过滤掉.下面两个查询返回相同结果但第二个明显就快了很多。

 

##低效: 
SELECT JOB, AVG(SAL)

  FROM EMP

 GROUP BY JOB

HAVING JOB = 'PRESIDENT' OR JOB = 'MANAGER';
##高效: 
SELECT JOB, AVG(SAL)

  FROM EMP

 WHERE JOB = 'PRESIDENT'

    OR JOB = 'MANAGER'

 GROUP BY JOB;

 

二、            业务方面优化

 

 

1.        按业务查询条件区分拼装查询语句

在对查询条件复杂但业务上又不能对查询条件进行删减的查询语句,可以进行适应性调整。对使用频繁的查询条件和相对使用较少的条件进行分别封装查询语句。比如查询一个流程信息时,查询条件中要有流程节点,节点处理人,代理人……。在这里按处理人查询是一个比较频繁的动作,但按代理人查询是一个使用较少但又不可缺少的条件。这里咱们就可以采取分别封装的办法。

2.        时效性不强的业务使用缓存

对于一些时效性不强的业务,建设使用缓存,而不是每次访问数据库,比如首页面中的企业新闻、企业公告……。像这种人人都会使用,频繁访问,时效性要求不强的业务尽量使用缓存技术来降低数据库负载。

3.        使用默认值

在可能建立索引的列上添加默认值。由于很简单,oracle中存在空值列不使用B树索引。而且列值比较多的列不适合建立位图索引。所以合理使用默认值非常有必要。

分享到:
评论

相关推荐

    Oracle 大数据量操作性能优化

    Oracle 建议,当表大小超过 2G 或者表有历史数据和当前数据之分时,考虑使用分区。 分区的种类有多种,包括范围分区、列表分区、Hash 分区、范围 Hash 混合分区、范围列表混合分区等。其中,范围分区和列表分区是最...

    oracle数据仓库技术方案建议书v1

    综上所述,Oracle数据仓库技术方案建议书v1详细阐述了如何构建一个全面、高效、安全的数据仓库系统,旨在为×××提供强大的数据管理和分析能力,从而支持更精准的业务决策和优化运营。通过采用Oracle的先进技术和...

    oracle数据库性能优化.pdf

    Oracle数据库性能优化是确保系统高效运行的关键环节,尤其是在大数据量和高并发的环境中。Oracle数据库因其先进、完整和集成的特性,在市场中占据主导地位,因此深入理解和掌握Oracle的优化技术至关重要。 首先,...

    ORACLE19c数据库性能优化说明.docx

    全表扫描是对表中的每条记录进行顺序访问,Oracle通过批量读取数据块来优化这一过程。ROWID包含了记录的物理位置信息,索引使得快速访问ROWID成为可能,从而加速基于索引列的查询。 利用索引来提高效率,有几种策略...

    oracle优化建议34条

    ### Oracle优化建议34条详解 #### 1. 选择合适的驱动表(只在有物化视图的情况下) 在Oracle数据库查询中,选择正确的驱动表是优化查询性能的关键之一。通常,驱动表(driving table)应是那些具有较小基数(即不同...

    oracle机制及内存区的优化建议

    本文将深入探讨Oracle的核心组件,给出优化建议。 首先,Oracle数据库由内存、文件和进程三大核心组件构成。系统全局区(SGA)是Oracle内存管理的关键部分,它包括了Shared Pool、Database Buffer Cache、Redo Log ...

    NC的Oracle优化及异常数据处理

    在企业信息化管理中,Oracle数据库的优化及异常数据处理是保证业务系统稳定运行的关键因素之一。本篇文档详细介绍了SQL优化的本质、途径以及异常数据处理的方法,对于从事Oracle数据库管理的工程师来说,具有较高的...

    在线重组Oracle数据库优化关键SAP应用性能

    10. **SQL优化**:针对SAP应用中的慢查询,可以使用SQL优化顾问找出问题并提出改进建议。优化SQL语句,减少全表扫描,增加索引使用,可以大大提高查询效率。 以上是关于在线重组Oracle数据库以优化关键SAP应用性能...

    oracle 存储优化配置白皮书.pdf

    ### Oracle存储优化配置白皮书知识点解析 #### 一、引言 在现代信息技术领域,Oracle数据库因其强大的功能和稳定性而被广泛应用于企业级数据管理之中。然而,随着业务量的增长和技术需求的变化,如何有效提升...

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

    10. **SQL优化工具**:介绍Oracle的SQL Tuning Advisor和SQL Access Advisor,以及如何利用这些工具自动识别和建议优化方案。 本书作为DBA和开发人员的参考字典,不仅提供了理论知识,还包含大量的实际案例,帮助...

    Oracle_SQL优化脚本_完整实用资源

    Oracle SQL优化是数据库管理员和开发人员提升系统性能的关键技能之一。这个"Oracle_SQL优化脚本_完整实用资源"压缩包包含了一系列工具和方法,旨在帮助你优化在Oracle数据库上运行的SQL查询,从而提高数据库的响应...

    Oracle语句优化53个规则详解

    - **建议**:通常推荐使用基于成本的优化器,因为它可以根据统计信息动态调整执行计划,从而提高查询效率。避免使用`CHOOSE`优化器,因为它可能导致不必要的全表扫描。 #### 二、访问Table的方式 Oracle支持两种...

    oracle SQL优化技巧

    可以增加每次数据库访问的检索数据量,建议值为 200。 6. 使用 DECODE 函数来减少处理时间 使用 DECODE 函数可以避免重复扫描相同记录或重复连接相同的表。 7. 整合简单、无关联的数据库访问 如果你有几个简单的...

    oracle性能优化技巧

    - 为了避免不必要的全表扫描,建议避免使用选择性优化器,而是直接选择基于规则或基于成本的优化器。 通过调整`init.ora`文件中的`OPTIMIZER_MODE`参数,可以设置数据库的默认优化器模式。此外,也可以在SQL语句...

    ORACLE性能优化工具整理

    Oracle性能优化工具整理 Oracle数据库作为全球广泛使用的商业数据库管理系统,其性能优化对于确保数据库稳定运行、提高应用响应速度至关重要。性能优化不仅需要通过合理设计数据库模式、编写高效SQL语句等手段,而且...

    oracle性能优化技术内幕

    10. **监控与诊断工具**:如V$视图、ADDM(Automatic Database Diagnostic Monitor)和ASH(Active Session History)等,可以帮助识别性能问题,提供优化建议。 以上内容仅是Oracle性能优化的冰山一角,实际操作中...

    Oracle 大数据量操作优化

    ### Oracle大数据量操作优化 在面对Oracle数据库中的大数据量操作时,如何有效地提升操作性能成为了一个重要的课题。本文将从不同角度出发,详细介绍如何通过多种技术手段和策略优化Oracle数据库的大数据量操作。 ...

    Oracle数据库优化策略

    Oracle数据库是全球广泛使用的大型企业级关系型数据库管理系统,其性能优化对于企业的数据处理效率至关重要。本文将深入探讨Oracle数据库的优化策略,旨在提供一套全面的解决方案,从设计阶段到实施阶段,再到系统...

    oracle高性能优化

    3. **SQL Tuning Advisor (STA)**:利用Oracle的SQL Tuning Advisor工具对性能较差的SQL进行自动优化建议。 #### 六、应用层面优化 1. **批处理**:尽可能将多个操作合并成一个批处理操作,减少网络传输次数。 2. ...

Global site tag (gtag.js) - Google Analytics