oracle数据库的优化

oracle数据库的优化

ID:25570358

大小:59.00 KB

页数:7页

时间:2018-11-21

oracle数据库的优化_第1页
oracle数据库的优化_第2页
oracle数据库的优化_第3页
oracle数据库的优化_第4页
oracle数据库的优化_第5页
资源描述:

《oracle数据库的优化》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、Oracle数据库的优化摘要本文提出了一种优化Oracle数据库的方法。Oracle中SQL语句的执行过程可分为解析(Parse)、执行(Execute)和提取结果(Fetch)三步,此方法就是通过对SQL语句在Oracle数据库中优化执行的三个过程来提高Oracle数据库的性能。关键词数据库扫描多表联结子查询1如何优化Parse1.1SQL语句的Parse处理步骤:1)计算语句值2)共享池中有无与此语句值相同的语句?3)共享池中有与此语句字符完全匹配的语句?4)准备要运行的SQL语句5)为新语句在共享池中创建空间6)将语句存放在共享池中7)修改共享池图,标明语句的值和在共享池中的位置8)执行

2、准备好的SQL语句最理想的是,语句只执行1、2、3和8步来进行处理。不经过2、3步来测试被传给Oracle的语句要使用1~8步进行处理。只经过1、2、3、8的SQL语句要比经过1~8步的语句更为有效。1.2在共享池中重用SQL语句当SQL语句被传递给Oracle处理时,其秘诀是重复使用已经在共享池中的语句,而不是让Oracle在接受语句时去准备新的语句。前面表明,如果Oracle接受了一个与共享池中的语句相一致的语句,就重用共享池中的语句。Oracle提供在数据库中存储代码的能力。当应用系统开始运行时,从数据库中读取代码(可用PL/SQL语句编制)并像其它语句那样传递到共享池中去处理。从数据库

3、中取出的代码是编译过的并驻留在共享池中。可以利用数据库中存储的程序代码设计应用系统,检查所有的事务处理以及主要的通用的过程,研究现有的应用系统并把主要的处理程序转换为数据库中存储的程序代码。在Oracle中存储代码可以通过过程、程序包、函数、触发器等来实现。2如何优化Execute和Fetch2.1避免无计划的全表扫描全表扫描连续从表读取所有数据,而不管数据是否与查询有关。避免不必要的全表扫描有两个充足理由:1)全表扫描没有选择性2)过全表扫描读取的数据很快从SGA的缓冲区移走(如果正在扫描的表不是“高速存储”的表)在基于规则优化的情况下,如果下列任何条件在SGA语句出现,就要对一个表进行全表

4、扫描。1)该表无索引2)对返回的行无任何限定条件(如无ERGEJOIN。MERGEJOIN是一组操作,在所有行被处理完之前,它不返任何记录给下一操作。NESTEDLOOPS和HASH是行操作,因此会很快将第一批记录返回给下一个操作。在每个联结选项里,必须执行一些步骤以获取最好的联结性能。如果没有适当地优化联结操作,那么联结所需的时间也许随着表的增长而呈指数级地增长。2.4管理包含视图的SQL语句如果查询包含视图,优化器有两种执行查询的方法:首先解决视图然后执行查询,或者把视图文本集成到查询里去。如果首先执行视图,那么首先完成全部的结果集,然后用其余的查询条件做过滤器。首先解决视图会导致查询性能

5、下降的问题,这取决于所涉及表的相对大小。如果视图被集成到查询里,那么查询的条件也可以应用于视图里,并且可以使用一个小一些的结果集。然而在一些情况下,也许可以通过视图分离组操作提高查询性能。如果一个视图包含集合的操作(如Groupby、SUM、COUNT或者DISTINCT),那么视图不能被集成到查询里去。不使用组或者没有集合操作的视图的SQL语法可以被集成到大的查询里去。2.5优化子查询当使用自查询时,也许会碰到几个独特的问题。涉及子查询的查询潜在问题如下:也许在执行完查询的剩余部分前执行子查询(与执行分组功能的视图相似)。子查询也许要求特定的提示,但这些提示不

6、直接与调用该子查询的查询有关可以作为单个查询执行的子查询也许被代替写成几个不同的子查询。也许在使用notin子句或者notexists子句时,不能在最有效的方式下进行子查询的存在查询。1)当执行子查询时如果一个查询包含子查询,那么优化器有两种完成查询的方法:首先完成子查询,然后完成查询(“视图的方法”),或者将子查询集成到查询里去(“联结”的方法)。如果首先解决子查询,那么整个子查询的结果集将首先被计算,并且用查询条件的剩余部分做过滤器。如果没有使用子查询去进行存在检查,那么“联结”方法将通常要比“视图”方法完成得好。如果一个子查询包括集合操作,如groupby

7、,SUM或者DISTINCT,那么不能集成子查询到查询的其余部分里去。非集成的子查询限制了提供给优化器的选项。2)如何组合子查询一个查询可以包含多个子查询,使用的子查询越多,集成或者重写它们到大的联结里就越困难。既然有多个子查询使集成困难,就应该尽可能地组合多个子查询。3)怎样进行存在检查有时子查询不返回行(记录),但可以进行数据正确性检查。在相关表里的记录或者存在或者不存在的逻辑检查,称为存在检

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。