第4章关系系统与其查询优化.ppt

  1. 1、本文档共27页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
An Introduction to Database System 学习目标 掌握关系系统的定义和分类 掌握关系系统查询优化的总目标和步骤 理解关系系统查询优化的一般准则 4.1 关系系统 关系模型的三要素: 关系数据结构:域及域上定义的关系。 关系操作:并、交、差、广义笛卡尔积、选择、投影、连接和除。 关系完整性:实体完整性、参照完整性、用户自定义完整性。 4.1 关系系统 关系系统的定义 一个系统可定义为关系系统,当且仅当它至少: (1)支持关系数据库(关系数据结构)。 从用户观点看,数据库由表构成,并且只有表这种结构。 (2)支持选择、投影和(自然)连接运算。 对这些运算不必要求定义任何物理存取路径。 关系系统定义的三个问题 为什么关系系统除了要支持关系数据结构外,还必须支持选择、投影和连接运算呢? 为什么要求这三种运算不能依赖于物理存取路径呢? 为什么要求关系系统支持这三种最重要的运算而不是关系代数的全部运算功能呢? 关系系统的分类 按照E.F.CODD的思想,依据系统支持关系模型的程度,可分成四类: 表式系统:仅支持关系(即表)数据结构,不支持集合级的操作,如倒排表列系统,它不能算作关系系统。 (最小)关系系统:如前面定义所述,支持关系数据结构和选择、投影、连接三种关系操作,如FoxBASE、FoxPro等。 关系完备的系统:支持关系数据结构和所有的关系代数操作。如Oracle 7.X、 Sybase SQL SERVER 10等90年代的许多RDBMS。 全关系系统:支持关系模型的所有特征。如目前大多数主流关系系统产品:Oracle 9i/10g/11i、Sybase Adaptive Server 12、MicroSoft SQL SERVER 2003/2005等已不同程度上接近或达到了这个目标。 4.2 关系系统的查询优化 查询优化概述:关系查询优化是影响RDBMS性能的关键因素,由于关系表达式的语义级别很高,使关系系统可以从关系表达式中分析查询语义,提供了执行查询优化的可能性。 查询优化的优点:用户不必考虑如何最好地表达查询就可以获得较好的效率,系统优化比用户程序优化做得更好,这是因为: 优化器可以从数据字典中获取许多统计信息,而用户程序则难以获得这些信息 。 如果数据库的物理统计信息改变了,系统可以自动对查询重新优化以选择相适应的执行计划。在非关系系统中必须重写程序,而重写程序在实际应用中往往是不太可能的。 优化器可以考虑数百种不同的执行计划,而程序员一般只能考虑有限的几种可能性。 优化器中包括了很多复杂的优化技术。 查询优化的目标:选择有效策略,求得给定关系表达式的值。 实际系统查询优化的步骤 将查询转换成某种内部表示,通常是语法树。 根据一定的等价变换规则把语法树转换成标准(优化)形式。 选择低层的操作算法。对于语法树中的每一个操作,计算各种执行算法的执行代价,选择代价小的执行算法。 生成查询计划(查询执行方案):由一系列内部操作组成的。 代价模型 集中式数据库:单用户系统的总代价 = I/O代价 + CPU代价;多用户系统的总代价 = I/O代价 + CPU代价 + 内存代价 分布式数据库:总代价 = I/O代价 + CPU代价[+ 内存代价] + 通信代价 查询优化的必要性 一个实例:求选修2号课程的学生姓名,用SQL语言表达为:? SELECT Student.Sname FROM Student, SC WHERE Student.Sno=SC.Sno AND SC.Cno=2; 假设学生~课程数据库有1000个Student记录、10000个SC记录,其中选修2号课程的选课记录为50条。对于上述SQL查询,DBMS可以转化为如下几种等价的关系代数表达式: 执行策略1:ПSname(бStudent.Sno=SC.Sno ∧SC.Cno=2 (Student×SC)) 执行策略2:ПSname(бSC.Cno= 2 (Student SC)) 执行策略3:ПSname(Student бSC.Cno= 2 (SC))? 执行策略4:ПSname(Student бSC.Cno=‘2’ (SC)),假设SC表在Cno上有索引,Student表在Sno上有索引。 由于执行策略不同,查询的时间相差很大。 执行策略1:ПSname(бStudent.Sno=SC.Sno ∧SC.Cno=2 (Student×SC))? 计算广义笛卡尔积:把Student和SC的每个元组连接起来。 方法是:在内存

文档评论(0)

xiaofei2001128 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档