基于Oracle数据库的SQL语句优化
扫描二维码
随时随地手机看文章
摘 要: 通过分析Oracle数据库执行SQL语句的过程,采用比较SQL语句优化之前和优化之后的执行时间和调用的数据块数量方法来判断优化效果,最后得到消耗时间少和调用数据块少的SQL语句。
关键词: Oracle数据库;优化;优化器;索引
随着信息化技术在各行业的广泛应用,Oracle数据库也越来越多地被使用到很多关键领域,成为国内高端数据库市场的主流产品和众多行业信息化系统的主要支柱。如何充分利用Oracle的各种功能来提高数据库的可用性,如何提高数据库的数据查询响应时间以及如何诊断数据库出现的问题已经成为不断提高Oracle应用水平和提高Oracle数据库应用系统性能的关键[1]。
1 SQL查询过程及优化器
1.1 SQL查询语句的执行过程[2]
查询优化最重要的就是对SQL语句进行优化。调整SQL对性能的改善要比调整其他方面明显得多。理解SQL语句的执行过程有助于更好地对其进行优化。SQL语句在Oracle中是自动执行的,绝大多数用户不需要关心各个阶段的执行细节。但是,对执行的各个阶段的了解会有助于快速找到性能低下的SQL语句,帮助书写出更高效的SQL语句,进而解决问题。几乎所有的SQL语句都分为语法分析、执行、读取数据三大阶段进行处理[3]。SQL查询语句的执行过程如图1所示。
1.2 Oracle查询优化器[4]
SQL是一种非过程化的语言,用户只需要发送取出数据的命令,对于数据的取出方式(如是通过索引还是全表扫描),则由数据库的优化器决定。Oracle的优化器用来决定SQL访问数据的有效路径,使语句执行所需要的开销最小。在Oracle的发展过程中,一共开发过两类优化器:基于规则的优化器和基于成本的优化器。它们之间的不同之处主要在于取得代价的方法与衡量代价的大小不同。
1.3 SQL查询语句的执行计划
Oracle要实现许多步骤才能完成SQL查询语句的执行,优化器将这些步骤组合在一起称为SQL查询语句的执行计划。从执行计划中可以看出数据库是如何执行查询语句的,判断出查询语句的执行是否高效,从而制定查询的优化方案。获取执行计划的方法有以下两种:(1)用Explain plan命令对语句的执行过程的一些信息进行统计,Explain plan用来显示优化器使用的执行计划而不实际运行查询;(2)用Set Autotrace动态查看每个SQL语句的执行计划,Autotrace可以查看会话中每个SQL语句的执行计划。SQL自动地进行Explain plan的工作,不用维护plan table表,因此使用非常方便。
2 系统优化措施
以具体的实例来说明系统优化问题以及调整方法。在某电子产品售后服务系统中,为加强对售后维修点备件使用情况的精确管理,库房发货人员对出库的每件备件粘贴一个唯一的一式两联条码,一联粘贴在发出的好备件上,另一联粘贴到从用户那里返回的坏备件上。发货业务和备件条码管理有关的E-R图如图2所示。
这个系统中有一个查询出库信息详单的视图,该视图在系统运行初期的查询速度较快,但随着时间推移,数据量增加,其中有些表的数据量已达20万行以上,导致该视图的查询速度明显变慢,而由于资金等各方面的原因,短期内很难从硬件方面对系统进行升级。因此决定在其运行的Oracle 9i平台上进行优化。在进行优化前,该视图的查询时间为1′07″左右,运行的硬件环境为:P42.66、IGB内存、240 GB普通IDE硬盘。在SQL*Plus中优化前的运行时间如图3所示。