Chinaunix首页 | 论坛 | 博客
  • 博客访问: 426022
  • 博文数量: 239
  • 博客积分: 8010
  • 博客等级: 中将
  • 技术积分: 2431
  • 用 户 组: 普通用户
  • 注册时间: 2008-06-02 21:12
文章分类
文章存档

2008年(239)

我的朋友

分类: DB2/Informix

2008-06-18 00:27:44

优化器进程

确切地说,优化器进程应被称为语法分析和优化进程。它负责SQL语句的语法分析和优化,生成SQL语句费用最低的执行计划。

SQL语言是数据库系统通用的访问接口。用户通过SQL语句更新、读取数据库中的数据,不需要知道数据在数据库中如何存放。数据库系统的这种特性实现了应用程序和数据之间的物理和逻辑独立性。

由于用户不了解数据的物理存放、数据的逻辑结构,因此SQL语句的执行方式最终要由数据库系统来决定,这就是优化器进程的工作。对任一个SQL语句,优化器首先需要进行语法分析,判定该SQL语句是否存在语法错误,决定发出该SQL语句的用户是否有执行权限。此外,一个SQL语句可能有很多种的处理方式,优化器需要从中找出最优、最合理的方式,作为该SQL语句的最终执行计划。

优化器是基于执行费用来选择SQL语句的最终执行计划。所谓执行费用,并不仅仅是指SQL语句执行时间的长短,它是对处理SQL语句所使用的CPU时间、需要的内存空间、执行的I/O操作以及处理时间长短等各方面因素的综合评价。

优化器在分析SQL语句时,首先找出SQL语句所有可能的执行计划,然后逐一进行费用评估,最终确定出费用最低的执行计划。

SQL语句处理所需费用的评估,不可能将所有的执行计划都实际上执行一遍,记录所用时间和系统资源。优化器基于数据库对象现有的统计信息,来大体估算SQL语句所需的执行费用。对一个表来说,可以使用的统计信息包括:表中的字段数、记录的长度、表中的记录数、表上是否有索引以及索引所使用的字段、字段上数值的分布等等。数据库对象上统计信息的准确与否,直接决定了优化器选择的执行计划是否合理。

数据库管理员应当定期维护数据库对象上的统计信息。如果对数据库对象执行了大批量的更新操作,现有的统计信息已经失去意义,管理员就应当立即考虑重新收集数据库对象的统计信息。

优化器的处理虽然由系统自动运行,用户无从干预,但是用户可以在提交的SQL语句中嵌入一些指示(directives)来影响优化器的选择。另外,数据库系统的一些配置参数,也可以设定优化器的处理方式。

有关优化器的更多处理信息,可以参看第5章。

阅读(752) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~