1、基于ORACLE的查询优化、DBMS查询规则查询优化是在查询执行引擎生成一个执行策略的过程中,尽量使查询的总开 销和总时间达到最小。任何关系数据库都有一套解决查询的规则, 而各种关系数据库查询的过程稍有所区别,但是基本的操作思想和过程是一致的。DBMS的查询规则一般分为以下几个过程:语法分析与翻译处理;查询优化处理;执行。目关数据的 十信息图1DBMS查询规则图1 .语法分析与翻译处理查询处理开始之前,系统必须在扩展关系代数的基础上将查询语句翻译成可 使用的形式,为此这一阶段完成两个主要的功能: 一是检查查询语句语法的正确 性;二是把查询语句分析成关系数据库能够理解的各个组成部分,构造该查询的
2、语法分析树,并将其翻译成关系代数表达式。2 .查询优化处理查询优化是为查询选择最有效的查询执行计划的过程。 查询优化一方面在关系代数级进行优化, 要做的是力图找出与给定表达式等价且执行效率最高的一个表达式。 为了在诸多查询执行计划中做出选择, 优化器必须估计每个查询执行计划的代价。 在没有真正执行查询计划之前, 准确计算出查询计划的代价通常是不可能的。因此,优化器要利用各关系的统计信息,来对计划做出最佳估计。3 .执行执行就是将优化器所选择的执行计划执行, 执行引擎从相应的数据库文件中筛选数据,将结果输出。优 化 器在选取优 化 规则 时 , 大多 数 DBMS( 如 ORACLE 、 SYB
3、ASE、 SQLSERVER 等 )都是采用基于代价的优化方法,优化器从数据字典中获取许多统计信息, 根据不同的算法估计出不同查询规划的代价, 然后选择一个较优的规 划。对 于 ORACLE , 在 ORACLE7 之 前 , 主 要 是 使 用 基 于 规 则 的 优 化 器RULEBASEDOPTIMIZATION( 简称 RBO) 。从 ORACLE8 开始, ORACLE 把一 个代价引擎(COSTENGINE)集成到数据库内核中,用来估计每个执行计划需要的 代价,该代价将每个执行计划所耗费的资源进行量化,从而CBO 可以根据这个代价选择出最优的执行计划,即基于代价的优化器 COSTB
4、ASEDOPTIMIZATION( 简称 CBO) 。要注意的是: 虽然 CBO 的功能随着ORACLE 新版本的推出, 功能越来越强,但它不是能包治百病的神药,否则就不再需要DBA 了。优化器综合权衡各个因素, 在众多的 执行计划中选择认为是最佳的执行计划。 然而, 应用设计人员通常比优化器更知道关于特定应用的数据特点。 无论优化器多么智能, 在某些情况下开发人员能选择出比优化器选择的最优执行计划还要好的执行计划, 这是需要人工干预数据库优化的主要原因。事实表明,在某些情况下,确实需要DBA 对某些语句进行手工优化。二 SQL 语句优化步骤数据库系统的生命周期可分为设计、 开发和成品三个阶段
5、。 在这三个阶段都可以提高查询速度。由于设计阶段进行数据库性能优化的成本最低,收益最大,因此在设计阶段就应该选择合理的数据库设计方法。 而在数据库系统的开发和成品阶段则需对应用程序进行优化:通常应用程序可分为两个方面源代码和SQL 语句。源代码的优化由于涉及程序逻辑的改变,因此优化源代码要在时间成本和风险成本上投入较高代价,因此对SQL 语句的优化尤为重要3 。调整现有应用程序中 SQL 语句的最好方法是采取下列步骤 4 :1 .熟悉应用程序。管理员不仅需要熟悉特定的SQL 语句,还需要熟悉应用程序的功能和所做的操作。2 .使用SQLTRACE 工具分析特定SQL 语句执行的操作, 所使用的
6、RDBMS 的功能和应用程序对这些功能的使用情况。3 .在SQLTRACE中使用EXPLAINPLAN命令分析优化器执行这些SQL语句的方 式。下面具体的介绍一下三个步骤:1 .熟悉应用程序管理员不仅需要了解SQL 语句,还需要了解这些 SQL 语句的执行效果。首先, 需要将不同的 SQL 语句形成表格并确定每条SQL 语句对数据库中每个表的访问次数。 这个表以可视化方式告诉管理员用户对数据库中哪些表的访问最为频繁。这个表为管理员确定哪些 SQL 语句影响了哪些表提供了一个很好的快速参考。 管理员还可进一步深化这种方法, 并将该表中的 SQL 语句分成不问的类型,比如SELECT语句、INSE
7、RT语句、UPDATE语句和DELETE语句等等。如果应用程序是在脱离实际应用背景的情况下开发的,那么这种方法可能是不现实的。2 .使用 SQLTRACE 分析 SQL 语句通过在 SQL 语句上执行SQLTRACE 工具,管理员可收集到与所有 SQL 语句执行操作有关的大量极具价值的信息。 SQLTRACE 提供了如下一些非常有价值的信息:( 1)解析、执行和返回数据的次数( 2) CPU 时间和执行时间( 3)物理读和逻辑读操作次数( 4)处理的记录数量( 5)库缓冲区错误次数管理员可用这些信息确定哪些 SQL 语句效率较高,哪些 SQL 语句效率较低。这些信息可能会为管理员指出调整SQL
8、 语句的方向。为提高效率,可能不得不修改这些SQL 语句。通过使用EXPLAINPLAN 命令,管理员可能会发现从其他方面提高SQL 语句效率的方法。3.使用 EXPLAINPLAN 命令分析 SQL 语句通过将EXPLAINPLAN命令的执行结果作为SQLTRACE报表的一部分,管理员可获得关于 ORACLE 如何执行SQL 语句的更为详细的信息。通过EXPLAINPLAN 命令获得的信息(以及通过SQLTRACE 获得的信息)能帮助管理员判断 SQL 语句的执行效率。4.SQL 语句的执行效果除了检查 SQL 语句之外,管理员还应当检查 SQL 语句的执行效果。很多情况下, 如果某应用程序被成百上千的用户同时使用, 那么些本身并不重要的细节可能变得非常重要。这样的结果能导致与某个表甚至某一特定记录相关的瓶颈。