iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >Oracle存储过程的编写经验与优化措施
  • 353
分享到

Oracle存储过程的编写经验与优化措施

2024-04-02 19:04:59 353人浏览 薄情痞子
摘要

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

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、orderby、groupby、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调优命令:setstatistics io on, setstatisticstimeon , set showplan on等。

 

Oracle中Oracle存储过程和Sql语句的优化重点2008-07-2909: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存储过程编写经验和优化措施的描述,希望会给你带来一些帮助在此方面。


您可能感兴趣的文档:

--结束END--

本文标题: Oracle存储过程的编写经验与优化措施

本文链接: https://www.lsjlt.com/news/43155.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Oracle中如何编写存储过程
    在Oracle中编写存储过程可以使用PL/SQL语言。以下是一个在Oracle中编写存储过程的示例:```sqlCREATE OR ...
    99+
    2023-08-22
    oracle
  • Oracle中怎么编写存储过程
    在Oracle中编写存储过程有以下步骤:1. 创建或选择一个数据库用户来保存存储过程。可以使用如下命令创建一个新用户:```CREA...
    99+
    2023-08-23
    Oracle
  • MySQL存储引擎选择与优化的项目经验分享
    MySQL存储引擎选择与优化的项目经验分享在开发和管理MySQL数据库时,选择合适的存储引擎并进行相关的优化是至关重要的。存储引擎直接影响数据库的性能、可靠性和可扩展性。本文将分享我在项目中的MySQL存储引擎选择和优化的经验。一、存储引擎...
    99+
    2023-11-02
    查询优化 MyISAM等存储引擎。 优化:通过索引优化 避免全表扫描
  • oracle存储过程优化的方法是什么
    要优化Oracle存储过程,可以使用以下方法: 优化SQL语句:确保存储过程中的SQL语句能够高效地执行,避免使用不必要的查询和...
    99+
    2024-04-09
    oracle
  • 编写易维护的Golang存储过程
    如何在Golang中编写可维护的存储过程 在Golang中,想要编写可维护的存储过程,首先需要了解存储过程的概念以及如何在Golang中实现。存储过程是一种存储在数据库中的包含一系列S...
    99+
    2024-02-24
    golang 存储过程 维护 sql语句
  • oracle中存储函数与存储过程的示例
    这篇文章主要介绍了oracle中存储函数与存储过程的示例,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一:存储过程:简单来说就是有名字的pl...
    99+
    2024-04-02
  • oracle查询的存储过程怎么写
    在 oracle 中创建查询存储过程的步骤如下:创建存储过程:使用 create or replace procedure 语句编写存储过程,定义输入和输出参数(可选)。定义输...
    99+
    2024-05-10
    oracle
  • mysql存储过程与函数的写法
    本篇内容介绍了“mysql存储过程与函数的写法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! 存...
    99+
    2024-04-02
  • Oracle存储过程编写:判断数据库表是否存在
    在Oracle数据库中,存储过程是一种可以保存并重复使用的一组SQL语句的集合,可以实现一定的逻辑功能。在编写Oracle存储过程的过程中常常会涉及到判断数据库表是否存在的需求,以便在...
    99+
    2024-03-08
    oracle 存储过程 判断表存在 sql语句
  • Oracle存储过程批量更新的优势与应用
    Oracle存储过程批量更新的优势与应用 在Oracle数据库中,存储过程是一种预先编译并存储在数据库中的可重复执行的程序单元。存储过程提供了一种有效的方法来组织和管理数据库操作,同时...
    99+
    2024-03-08
    oracle 存储过程 批量更新
  • Oracle存储过程批量更新的性能优化策略
    Oracle存储过程批量更新的性能优化策略 在Oracle数据库中,存储过程是一种用来处理数据逻辑或执行特定任务的数据库对象,可以提供一定的性能优化策略,特别是在批量更新数据时。批量更...
    99+
    2024-03-08
    oracle 性能优化 存储过程
  • PHP编写数据库存储过程的方法
    随着Web应用程序的快速发展,数据库的需求也越来越大。PHP已经成为Web应用程序最广泛使用的语言之一,因为它非常灵活和易用。对于那些需要高效处理大量数据的应用程序来说,数据库存储过程已经成为一种非常重要的工具。通过使用存储过程,开发人员可...
    99+
    2023-05-15
    PHP编程语言 编写方法 数据库存储过程
  • 如何编写高效的PL/SQL存储过程
    编写高效的PL/SQL存储过程是一个需要技巧和经验的过程。以下是一些编写高效PL/SQL存储过程的建议: 涉及到大量数据的操作时...
    99+
    2024-05-07
    PL/SQL
  • oracle存储过程的优缺点是什么
    这篇文章给大家分享的是有关oracle存储过程的优缺点是什么的内容。小编觉得挺实用的,因此分享给大家做个参考。一起跟随小编过来看看吧。oracle存储过程的优点有:简化了复杂的操作,降低了错误出现几率以及执...
    99+
    2024-04-02
  • 编程技术分享:GO语言与算法优化的实践经验
    在现代软件开发中,算法优化是一个重要的话题。优化算法可以使程序更快速、更高效地运行,从而提高用户体验和减少资源消耗。GO语言是一种快速、可靠和高效的编程语言,可以帮助开发人员实现优化算法。在本文中,我们将探讨GO语言与算法优化的实践经验,...
    99+
    2023-08-23
    laravel 编程算法 自然语言处理
  • Oracle数据库开发:编写存储过程判断表是否存在
    在Oracle数据库开发中,编写存储过程来判断表是否存在是一项常见的任务。在数据库开发中,存储过程是一段预先编译的代码块,用于实现特定的功能或逻辑。通过编写存储过程来判断表是否存在,可...
    99+
    2024-03-09
    oracle 存储过程 表存在
  • oracle中存储函数与存储过程的区别是什么
    这期内容当中小编将会给大家带来有关oracle中存储函数与存储过程的区别是什么,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。一:存储过程:简单来说就是有名字的pl/sql...
    99+
    2024-04-02
  • oracle查询的存储过程怎么写出来的
    步骤:创建数据库连接。创建存储过程,指定名称、参数和 sql 语句。编译存储过程,检查错误。执行存储过程,传递参数。通过查询临时表 sys_refcursor 获取结果。 生成 Ora...
    99+
    2024-04-19
    oracle
  • 如何使用Golang编写高效的存储过程
    Golang是一门强大的编程语言,它能够轻松地实现存储过程。在本文中,我们将介绍如何使用Golang编写高效的存储过程,以及在项目中使用它们的好处。一、存储过程的基本概念存储过程是一种预编译的程序,它可以被保存在数据库中并在需要的时候被调用...
    99+
    2023-05-14
    Golang go语言 存储过程
  • Go语言并发编程:存储方案的选择与优化!
    随着互联网的发展,数据量的增长速度越来越快,因此存储数据的技术也变得越来越重要。在这种情况下,如何选择存储方案并进行优化成为了一个热门话题。本文将介绍如何在Go语言中进行存储方案的选择与优化。 一、选择存储方案 在Go语言中,我们可以使用...
    99+
    2023-10-17
    并发 教程 存储
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作