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

2008年(239)

我的朋友

分类: DB2/Informix

2008-06-17 23:49:51

为什么要使用优化器

我们知道,数据的存储和管理经历了三个阶段:人工管理阶段、文件系统阶段和数据库系统阶段。在人工管理和文件系统阶段,应用程序和数据紧密结合,应用程序随着数据结构的改变而改变,从而导致数据的利用率不高,数据不易管理,数据一致性很难维护等问题。

而在数据库系统阶段,数据库系统采用三级模式结构,由外到内依次为:外模式、模式和内模式,在外模式和模式、模式和内模式之间建立映象关系。这样一来,如果模式发生改变,只需要改变外模式和模式之间的映象,外模式不需要改变。同样,如果内模式发生改变,需要改变的只是模式和内模式之间的映象。

这种多模式结构,保证了数据的物理和逻辑独立性,减少了数据冗余,提高了数据利用率。同时,也使用户可以使用统一的接口访问数据库中的数据,由数据库系统来决定数据的处理方式,用户不用、也不必了解数据在数据库如何存放,从而极大地方便了用户的使用。

数据库技术的发展经历了层次数据库系统、网状数据库系统、关系数据库系统三个阶段。层次数据库系统使用层次数据模型,系统对用户请求的处理,就是从整个数据的顶层开始查找,一直找到要处理的数据为止。整个数据模型的实现已经定义了数据的处理方式。

网状数据库系统使用网状数据模型,任何相互关联的数据之间都要建立联系,系统对用户请求的处理,只要根据这些联系找到要处理的数据就可以了。该数据模型的实现也指定了数据的处理方式。

和层次数据库系统、网状数据库系统不同,关系数据库系统使用关系数据模型,就是使用二维表格表示数据以及数据之间的联系。整个数据模型没有给定数据的处理方式。对用户请求的处理,必须由系统根据数据字典信息来决定其处理方式,这就是优化器的工作。

一个用户的SQL语句请求可能有很多种等价的执行方式,优化器要决定SQL语句的最终执行计划。然而可不可以由用户来决定SQL语句的执行计划呢?

答案是肯定的。但由于数据库中的数据处于不断地变动之中,对一个SQL语句,用户提供的执行计划,只能反映数据及表结构的当前情况。在经过一段时间的运行之后,由于数据量及表结构的变化,该执行计划就不再合适,甚至可能很糟糕。而优化器动态地、根据数据库当前统计信息所生成的执行计划,就能够有效地适应数据量及表结构的这种变化。对用户来说,也不用为指定SQL语句的执行计划而详细地去了解数据库对象的定义、数据的分布等相关信息。

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