`
lizhiyu211
  • 浏览: 232686 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

oracle存储过程 调优 基础篇

阅读更多

1、如果用到其他库的Table或View,务必在当前库中建立View来实现跨库操作,最好不要直接使用“databsevv.dbo.table_name”,因为sp_depends不能显示出该SP所使用的跨库table或view,不方便校验。

 

 

2、开发人员在提交SP前,必须已经使用set showplan on分析过查询计划,做过自身的查询优化检查。

 

3、高程序运行效率,优化应用程序,在SP编写过程中应该注意以下几点:

a) SQL的使用规范:

i. 尽量避免大事务操作,慎用holdlock子句,提高系统并发能力。

ii. 尽量避免反复访问同一张或几张表,尤其是数据量较大的表,可以考虑先根据条件提取数据到临时表中,然后再做连接。

iii. 尽量避免使用游标,因为游标的效率较差,如果游标操作的数据超过1万行,那么就应该改写;如果使用了游标,就要尽量避免在游标循环中再进行表连接的操作。

iv. 注意where字句写法,必须考虑语句顺序,应该根据索引顺序、范围大小来确定条件子句的前后顺序,尽可能的让字段顺序与索引顺序相一致,范围从大到小。

v. 不要在where子句中的“=”左边进行函数、算术运算或其他表达式运算,否则系统将可能无法正确使用索引。

vi. 尽量使用exists代替select count(1)来判断是否存在记录,count函数只有在统计表中所有行数时使用,而且count(1)比count(*)更有效率。

vii. 尽量使用“>=”,不要使用“>”。 viii. 注意一些or子句和union子句之间的替换

ix. 注意表之间连接的数据类型,避免不同类型数据之间的连接。

x. 注意Oracle存储过程中参数和数据类型的关系。

xi. 注意insert、update操作的数据量,防止与其他应用冲突。如果数据量超过200个数据页面(400k),那么系统将会进行锁升级,页级锁会升级成表级锁。

b) 索引的使用规范:

i. 索引的创建要与应用结合考虑,建议大的OLTP表不要超过6个索引。

ii. 尽可能的使用索引字段作为查询条件,尤其是聚簇索引,必要时可以通过index index_name来强制指定索引

iii. 避免对大表查询时进行table scan,必要时考虑新建索引。

iv. 在使用索引字段作为条件时,如果该索引是联合索引,那么必须使用到该索引中的第一个字段作为条件时才能保证系统使用该索引,否则该索引将不会被使用。

v. 要注意索引的维护,周期性重建索引,重新编译Oracle存储过程。

c) tempdb的使用规范:

i. 尽量避免使用distinct、order by、group by、having、join、***pute,因为这些语句会加重tempdb的负担。

ii. 避免频繁创建和删除临时表,减少系统表资源的消耗。

iii. 在新建临时表时,如果一次性插入数据量很大,那么可以使用select into代替create table,避免log,提高速度;如果数据量不大,为了缓和系统表的资源,建议先create table,然后insert。

iv. 如果临时表的数据量较大,需要建立索引,那么应该将创建临时表和建立索引的过程放在单独一个子存储过程中,这样才能保证系统能够很好的使用到该临时表的索引。

v. 如果使用到了临时表,在存储过程的最后务必将所有的临时表显式删除,先truncate table,然后drop table,这样可以避免系统表的较长时间锁定。

vi. 慎用大的临时表与其他大表的连接查询和修改,减低系统表负担,因为这种操作会在一条语句中多次使用tempdb的系统表。

d) 合理的算法使用:

根据上面已提到的SQL优化技术和ASE Tuning手册中的SQL优化内容,结合实际应用,采用多种算法进行比较,以获得消耗资源最少、效率最高的方法。具体可用ASE调优命令:set statistics io on, set statistics time on , set showplan on 等。

Oracle中Oracle存储过程和Sql语句的优化重点2008-07-29 09:14 | 末日风情

1.全表扫描和索引扫描

大数据量表尽量要避免全表扫描,全部扫描会按顺序每条记录扫描,对于>100万数据表影响很大。

 

Oracle中通过RowID访问数据是最快的方式

 

对字段进行函数转换,或者前模糊查询都会导致无法应用索引而进行全表扫描

 

对Oracle共享池和缓冲区中的Sql必须要大小写都完全用上才能够匹配上

 

2.顺序问题

Oracle按照从右到左的顺序对数据表进行解析。因此From最后面的表为基础表,一般要选择记录数最少的表作为基础表。

 

对于Where条件的顺序,过滤到最大查询记录数量的条件必须写在Where条件的结尾处。

 

Where条件中涉及到使用复杂函数判定的必须注意要写到Where条件的最前面

 

3.索引方面

记录数少的表保留有主键索引就可以了,不要再去建其它索引,全表扫描也很快

 

索引最好单独建立表空间,必要时候对索引进行重建

 

必要时候可以使用函数索引,但不推荐使用

 

Oracle中的视图也可以增加索引,但一般不推荐使用

 

*Sql语句中大量使用函数时候会导致很多索引无法使用上,要针对具体问题分析

 

4.其它

避免使用Select *,因为系统需要去帮你将*转换为所有的列名,这个需要额外去查询数据字典。

 

Count(1)和Count(*)差别不大。

 

多使用Decode函数来作简单的代码和名称间的转换,以减少表关联

 

使用Truncate替代delete来删除记录,但Truncate数据不记录日志,无法进行回滚

 

对于复杂的Oracle存储过程可以多次提交的数据的要多分多次Commit,否则长事务对系统性能影响很大

 

Distinct和Having子句都是耗时操作,应该尽可能少使用

 

在不需要考虑重复记录合并时候用Union All来代替Union

 

使用显性游标而不使用隐性游标,特别是大数据量情况下隐性游标对性能影响很大

 

是否使用函数的问题

 

用直接的表关联来代替Exist.用Exist或Not Exists来代理In。In进行子查询效率很差。

 

5.SQL语句分析

通过SQLPLUS中的SET TRACE 功能对Sql语句的性能进行分析

 

通过Toad或PL/SQL Developer对语句的性能进行和索引的使用情况进行分析

 

对Oracle缺省的优化不满意可以强制使用Hint,但一般不推荐使用

 

对Flag等只存储是或否信息的字段,一般不推荐建立索引。必要可以采用位图索引

 

*存在递归查询情况如果关联Table太多对性能会造成较大影响,往往推荐采用临时表转为分步骤操作提高性能

 

*尽量使用表关联查询而不使用函数,但涉及类似于代码表要重复关联多次取数据问题时候又适合使用函数

 

上述的相关内容就是对Oracle存储过程编写经验和优化措施的描述,希望会给你带来一些帮助在此方面。

分享到:
评论

相关推荐

    OREACL数据库\Oracle性能调优基础篇.

    ### Oracle数据库性能调优基础篇 #### 一、Oracle架构与基础知识 在Oracle数据库的架构中,主要包括以下几个关键部分: 1. **实例(Instance)**:它由一组内存结构(SGA)和一组后台进程组成,负责管理数据库的...

    Oracle体系结构及SQL调优基础

    二、SQL调优基础 1. **查询优化器**:Oracle使用CBO(Cost-Based Optimizer)来选择执行查询的最佳路径。它评估不同执行计划的成本并选择最低成本的。 2. **索引优化**:索引可以显著提高查询速度,但也会增加写...

    PLSQL 存储过程 性能调优

    ### PL/SQL 存储过程性能调优 #### 概述 存储过程是数据库中预编译的一组SQL语句和过程控制结构,用于实现特定的功能。在Oracle数据库中,PL/SQL(Procedural Language for SQL)是用于编写存储过程的主要语言。...

    ORACLE_PLSQL性能调优

    ### ORACLE_PLSQL性能调优 #### 序言 在当今快速发展的信息技术领域,数据库管理系统作为数据存储与处理的核心工具,其性能优化显得尤为重要。Oracle作为业界领先的数据库解决方案之一,其PL/SQL语言更是被广泛...

    Oracle学习-基础篇-适合入门级学习人员

    "Oracle学习-基础篇-适合入门级学习人员"这个资源针对初学者提供了宝贵的入门材料,帮助他们逐步理解Oracle数据库的基本概念、操作和管理。 1. **Oracle数据库概述**:Oracle数据库是一种基于SQL的分布式数据库系统...

    OracleDBA使用手册安装篇

    Oracle DBA 使用手册的安装篇主要涵盖了在 Unix 平台上,特别是 Linux 系统中安装 Oracle 数据库系统的基础步骤和准备工作。Oracle 是一种广泛应用的关系型数据库管理系统,尤其适合大型企业级应用。在 Unix 环境下...

    ORACLE基础培训文档

    这篇“Oracle基础培训文档”旨在为初学者提供一个全面了解Oracle数据库的平台,帮助大家掌握其基本概念、操作和管理技巧。 首先,我们从基础开始,Oracle数据库的核心是SQL(结构化查询语言),它是用于管理和处理...

    oracle dba基础知识

    本篇文章将深入探讨Oracle DBA所必备的基础知识,包括Oracle的体系结构、内存结构、后台进程等方面,旨在为数据库维护工程师提供必要的理论与实践指导。 一、Oracle体系结构 Oracle数据库体系结构是理解其工作原理...

    史上最完整官方Oracle OCP中文文教材

    7. **Oracle 11G SQL基础-1.pdf**:作为基础篇,这个文件将详细介绍SQL的基本语法,包括DML(数据操纵语言)和DDL(数据定义语言),以及简单的查询语句。 通过这些教材,学习者可以系统地了解Oracle 11G数据库的...

    oracle入门 基础教程 pdf 文档

    - PL/SQL:Oracle特有的过程化语言,用于编写存储过程、函数、触发器等数据库程序。 2. **安装** - 系统需求:分析安装Oracle数据库所需的硬件和软件环境,包括操作系统兼容性、内存与磁盘空间要求等。 - 安装...

    涂抹Oracle 三思笔记之一步一步学Oracle

    但我可以根据标题“涂抹Oracle 三思笔记之一步一步学Oracle”和给定的相关知识点要求,构造一篇关于Oracle数据库学习的基础知识点文章,以满足您的需求。 Oracle数据库是全球范围内广泛使用的企业级关系数据库管理...

    学习oracle学习oracle

    对于想要学习Oracle的人来说,首先需要理解数据库的基本概念,如SQL语言、表、索引、视图、存储过程等。Oracle支持SQL标准的同时,还引入了许多高级特性,如PL/SQL编程语言、分区表、物化视图、触发器等。 学习...

    Oracle 9i 原版培训教材-1-1(中文版)___Oracle9i数据库管理基础PDF

    本篇将围绕“Oracle 9i数据库管理基础”这一主题,深入探讨Oracle 9i的核心概念、安装配置、数据管理、性能优化以及日常维护等方面的知识。 一、Oracle 9i概述 Oracle 9i是Oracle数据库的第9个主要版本,引入了诸多...

    oracle基础教程

    教程的第一部分《Oracle9.0入门_01_基础篇.pdf》可能涵盖了Oracle数据库的基本概念,包括数据库的架构、数据类型、表的创建以及SQL语言的基础知识。 《Oracle9.0入门_02_安装9i.pdf》将详细介绍如何安装和配置...

    详细Oracle.rar

    4. **PL/SQL编程**:PL/SQL是Oracle特有的过程化语言,用于编写存储过程、函数、触发器等,学习其语法和用法。 5. **数据库对象**:讨论视图、索引、约束和序列等数据库对象的创建与管理。 6. **数据库安全管理**...

    oracle官方文档-Oracle Database Concepts

    3. **数据库对象**:Oracle数据库包含多种对象,如表(Tables)、视图(Views)、索引(Indexes)、序列(Sequences)、存储过程(Stored Procedures)和触发器(Triggers)。它们是数据库应用的基础,满足不同的...

    oracle学习资料 .zip

    首先,Oracle基础部分涵盖了数据库的基本概念,如表、视图、索引、存储过程、触发器等。理解这些概念是掌握Oracle的前提。表是数据的主要存储单元,视图提供了一种虚拟的数据表现形式,索引则能显著提升查询速度。...

    oracle学习课件,值得学习

    1. **基础篇**:介绍Oracle数据库的基础知识,如数据库安装、配置、启动与关闭,以及Oracle的体系结构,包括内存结构(SGA和PGA)、后台进程、数据文件、控制文件、重做日志文件等。 2. **SQL篇**:讲解SQL语言,...

    微软数据库开发梦工场多媒体教学-oracle篇.rar_oracle

    1. **Oracle基础**:了解Oracle数据库的基本概念,如表、视图、索引、存储过程、触发器等,以及SQL语言的基础语法。 2. **安装与配置**:学习如何在不同操作系统环境下安装Oracle数据库,设置环境变量,配置监听...

    Oracle AWR报告深入分析

    因此,本篇文档试图填补这一空白,并基于Oracle内部包`dbms_swrf_report_internal`和`test_dbms_workload_repository`的源代码进行深度剖析。 #### 二、AWR报告的核心概念与生成流程 ##### 2.1 AWR报告的基础知识 ...

Global site tag (gtag.js) - Google Analytics