
学术论坛
浅谈Oracle数据库SQL性能优化
吴秀君
(乌鲁水齐职业大学新疆乌鲁水齐830002)
数事其务与质用
摘要:本文通过对SQL语句优化技水的介绍,对数据查询语的的优化方式进行分析,得出应用程序的抗执行最终将归结为数据序中的SQL语与执行因此SQL语与的执符衍效率的好坏直接影响系统资源的占用情况,所以为了提高ORACLE数据库的性能,必频多角度优化SQL语句。
关键词:Oracle数据库SQL语句优化
中图分类号:TP311.138 1引言
文献标识码:A
文章编号:1007-9416(2013)09-0194-02
Oracle数据库应用系统通过SQL(structuredquerylanguage 语言与数据库进行通信,数据库管理系统通过执行用户提交SQL语
随着软件技术的不断发展,系统性能越来越重要。信息系统都离不开数据库应用,而Oracle数据库的应用系统一股规模比较大,如何优化ORACLE数据库的性能就显得尤为重要。为了保证Oracle数据库运行在最佳的性能状态下,在信息系统开发之前就应该考虑数据库的优化策略。优化策略一般包括服务器操作系统参数调整,数据库参数调整、网络性能调整、应用程序SQL语句分析及设计等几个方面,本文就如何优化SQL语句的方法来实现对ORACLE数据库性能的优化。
2数据库SQL查询优化的原则
数据库SQL查询优化的一个基本原则就是:通过尽可能少的感盘1/O访间获取所需要的数据。要评价查询优化性能,需要在数据库优化前后比较其评价指标:响应时间和吞吐量之间的权衡,数据库的命中率以及内存的使用效率,并以此来衡量优化的效果和指导优化的方向。优质的查询语句可以使应用系统的性能得到大大提高。拙劣的应用SQL语句,大小不合适的SGA内存结构,效率差的SQL语句.执行计划过度的文件1/O及访问数据库资源的紊乱等都会影响数据库系统的性能和执行效率。对于影响ORACLE数据库系统性能的要素除了主机CPU,RAM,存储系统,OS参数配置,ORACLE参数配置之外,最关键的要素就是SQL的编程质量,因此SQL语句尤其是复杂SQL语句的性能优化对于数据库的性能是至关重要的
优化器的优化基于用户对所查询表的内容和其他一些与服务器有关的因素,如Cache大小,Cache策略,L/O大小等,SQL查询语句都可以有很多种查询计划,优化器将估计出全部的执行方法中所需时闻最少的也就是所谓成本最低的一种方法。
(1)索引优化要尽可能的使用索引,减少磁盘的I/0操作。(2)连接手段在进行查询连接时优化器将所有连接的方法全
部列举出来,计算每一种连接的成本,选择成本最低的一种。如连接时用到的数据无法获得,一般系统会使用平均密度作为依据,估算可能的命中率。如,一个存储过程或触发器中,有表达式的值在编译时无法得到,优化器就只能使用它的平均密度来估计命中的记录数。例如:DECLARE@value money
SELECT name FROM employee WHERE salary=@value 只是由于@value的值在执行前不知道,它只能使用其平均密度来估计这条命令将要命中的记录数,
(3)其他手段如,数据表空间和索引表空间的分离,关系密切的表之间的表空间的分离,表空间的物理分布,都可以提高应用的性能。
遵守这些原则就可以优化排序操作,提高SQL查询性能。 3Oracle数据库SQL查询优化的过程和方法
3.1Oracle数据库SQL查询语向处理过程
句完成查询过程,具体的查询操作包括解析、执行和提取数据三个阶段。
(1)解析是检查SQL语句的语法和语义,最终生成SQL语句的执行计划,并将SQL语句和执行计划存放到共享池中。在解析期间,搜索库高速缓存检查是否存在相同的SQL语句,若存在则直接执行该SQL 语句。否则检查SQL语句的语法,语义以及用户访问对象的权限,最后交给查询优化器,由查询优化器确定SQL语句的最佳执行计划。
(2)执行(Execute)是指服务器进程按照SQL语句执行计划执行 SQL语句。执行计划是指执行这个查询所需要的一系列步骤,主要包括访问数据表的方式,表的连接次序,表的连接方式,以及各个步骤执行的先后顺序等。
(3)提取数据(fetch)是指将被选择行数据返回到客户端。 3.2查询优化方法
(1)SQL执行计划查看。使用PL/SQL可以看到SQL的执行计划,默认的是ALLROWS,如果对ALLROWS的执行计划不满意的话,我们可以选择Rule规则查看。
(2)如果表分析仍然无法凑效,则需要考患使用hint的方式就是在SQL的开始的中的select语句部分加上/*+rule*/,
然后再进行测试。
(3)执行计划分析。如果使用RULE仍然没有好的执行计划,那么就要对SQL语句进行分析。1)检查TableAccessFull全表扫描部分。
(4)索引选用方法,1)对于单表查询的情况,如果没有选择最佳的索引,则可以考虑使用表分析方式看是否会改善ORACLE选择,如果不能的话,则需要使用强制索引或者屏蔽非最佳索引字段方式来强迫选择最佳索引。
例如:
select+from tb_rp_bizs_app_fin_list where app_date> sysdate1 and app_date
ORACLE选择的是exch_id索引为先,app_date索引在后,如果用RULE规则,也只会选择exch_id索引,表分析后仍不改变选择(ORACLE对确定条件的优先级权值比非确定条件高)
解决方法:
a)exch_id =“91001"改为 exch_id II-=‘91001
b)select后面使用强制索引条件,强制不让使用exch_id索引 select /++no_index(a idx_rp_bizsappfinlist_5)+/ +from
tb_rp_bizs_app_fin_list a where app_date>sysdate1 and app_date
嵌入式数据库关键技术的研究与实现
下一章:浅谈分布式数据库跨库操作的安全设计