网站大量收购独家精品文档,联系QQ:2885784924

ch查询处理和优化.ppt

  1. 1、本文档共34页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
ch查询处理和优化

第12章 查询处理和优化 12.1 概述 12.2 代数优化 12.3 依赖于存取路径的规则优化 12.4 代价估算优化* 12.1 概述 重要性 查询是数据库系统中最基本、最常见和最复杂的操作。对数据库的查询一般都是以查询语言(如SQL)表示。从查询请求出发,直到得到查询结果,这一过程称为查询处理。 关系数据库系统的查询语言一般是“非过程语言”,它减轻了用户选择存取路径的负担。用户只要提出‘干什么’,不必指出‘怎么干’。即用户不必关心查询的具体执行过程,而由DBMS确定合理的、有效的执行策略。DBMS在这方面的作用成为查询优化 。 对于使用非过程查询语言的RDBMS,查询优化是查询处理中非常重要的一环,对系统性能会产生很大的影响。 12.1 引言 查询优化的优点 查询优化的优点不仅在于用户不必考虑如何最好地表达查询以获得较好的效率,而且在于系统可以比用户程序的“优化”做得更好。这是因为: 优化器可以从数据字典中获取许多统计信息,例如关系中的元组数、关系中每个属性值的分布情况等。优化器可以根据这些信息选择有效的执行计划,而用户程序则难以获得这些信息。 如果数据库的物理统计信息改变了,系统可以自动对查询进行重新优化以选择相适应的执行计划。在非关系系统中必须重写程序,而重写程序在实际应用中往往是不太可能的。 优化器可以考虑数百种不同的执行计划,而程序员一般只能考虑有限的几种可能性。 优化器中包括了很多复杂的优化技术,这些优化技术往往只有最好的程序员才能掌握。系统的自动优化相当于使得所有人都拥有这些优化技术。 12.1 引言 查询优化的目标和途径 关系数据库查询优化的总目标是:选择有效的策略,求得给定关系表达式的值。 查询优化的途径包括: 对查询语句进行等价变换(如改变基本操作的顺序)使查询执行起来更加有效。这种优化只涉及查询语句本身,而不涉及存取路径,故称为独立于存取路径的优化,或代数优化。 根据系统提供的查询路径,选择合理的存取策略(例如是选择顺序扫描还是选择索引),这称为依赖于存取路径的优化,或称物理优化。 有些查询可根据启发式规则选择执行策略,这称为规则优化。 根据可供选择的执行策略进行代价估算,并从中选择代价最小的执行策略,这称为代价估算优化。 此外,还可以通过应用数据库的语义信息对查询进行优化,这称为语义优化。 12.1 引言 查询处理和优化的步骤 实际系统对查询优化的具体实现一般可以归纳为四个步骤: 将查询转换成某种内部表示,通常是语法树。 根据一定的等价变换规则把语法树转换成标准(优化)形式。 选择低层的操作算法。对于语法树中的每一个操作需要根据存取路径、数据的存储分布、存储数据的聚簇等信息来选择具体的执行算法。 生成查询计划。查询计划也称查询执行方案,是由一系列内部操作组成的。这些内部操作按一定的次序构成查询的一个执行方案。通常这样的执行方案有多个,需要对每个执行计划计算代价,从中选择代价最小的一个。 在集中式数据库中,查询的执行开销主要包括: 总代价 = I/O代价 + CPU代价 在多用户环境下: 总代价 = I/O代价 + CPU代价 + 内存代价 12.1 引言 一个简单的例子 首先看一个简单的例子,说明为什么要进行查询优化。 例:求选修了2号课程的学生姓名。用SQL语言表达: SELECT S.Sname FROM Student S,SC WHERE S.SNO=SC.SNO AND SC.CNO=2; 假定学生-课程数据库中有l000个学生记录,l0000个选课记录,其中选修2号课程的选课记录为50个。 系统可以用多种等价的关系代数表达式来完成这一查询 1.Q1=∏ Sname(σ Student.sno=sc.sno∧sc.cno=2(Student×SC)) 2.Q2= ∏ Sname(σ sc.cno=2 (Student ||SC)) 3.Q3= ∏ Sname(Student|| σ sc.cno=2(SC)) 还可以写出几种等价的关系代数表达式,但分析这三种就足以说明问题了。我们将看到由于查询执行的策略不同,查询时间相差很大。 12.1 引言 查询执行策略Q1代价分析 计算广义笛卡尔积的代价 把S和SC的每个元组连接起来。一般连接的做法是:在内存中尽可能多地装人某个表(如Student表)的若干块元组,留出一块存放另一个表(如SC表)的元组。然后把SC中的每个元组和Student中每个元组连接,连接后的元组装满一块后就写到中间文件上,再从SC中读入一块和内存中的S元组连接,直到SC表处理完。这时再一次读入若干

文档评论(0)

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

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

1亿VIP精品文档

相关文档