- 1、本文档共61页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第5章 关系查询处理与优化
《数据库原理》第5章 关系查询处理与优化;本章主要介绍关系型数据库系统的查询优化技术。查询优化技术在关系型数据库中有着非常重要的作用,本章将使读者初步了解RDBMS查询的基本处理过程,查询优化的基本概念和基本方法,并给出了一些在实际应用中的查询优化方法。;5.1 查询优化概述
5.2 查询处理过程
5.3 查询优化方法
5.4 实际应用中的查询优化
5.5 本章小结
5.6 习题;查询优化对关系型系统来说既是挑战又是机遇。所谓挑战是指关系系统为了达到用户可接受的性能必须进行查询优化。由于关系表达式的语义级别很高,使得关系系统能够从关系表达式中分析查询语义,提供了查询优化的可行性。这为关系系统在性能上接近甚至超过非关系系统提供了机遇。
本节主要讨论查询优化问题的背景、查询优化的必要性和在关系数据库中进行查询的可行性。
;5.1.1 查询中遇到的问题
5.1.2 查询优化的必要性
5.1.3 查询优化的可行性;数据查询是数据库系统中的最基本、最常用和最复杂的数据操作。
查询处理的代价通常取决于查询过程对磁盘的访问,磁盘访问速度相对于内存速度要慢很多。
如何从查询的多个实现策略中进行合理的选择,这种选择过程就是查询处理过程的优化,简称查询优化。
;查询优化作为数据库中的关键技术,对数据库的性能需求和实际应用有着重要的意义。
查询是数据库的最主要功能,查询优化的基本途径可以分为用户手动处理和机器自动处理两种。;关系型数据库系统中,查询优化也是必须面对的挑战。关系数据理论基于集合论,集合及其相关理论构成了整个关系数据库领域中最重要的理论基础,这给关系数据查询优化处理在理论上提供了讨论的可行性;关系查询语言作为高级语言,具有较高层次的语义特性,为机器处理查询优化问题在实践上提供了可能性。;DBMS处理查询计划的过程是这样的:在做完查询语句的词法、语法、语义检查之后,将语句提交给DBMS的查询优化器,优化器做完代数优化和存取路径优化之后,由预编译模块对语句进行处理并生成查询规划,然后在合适的时间提交给系统处理执行,最后将执行结果返回给用户。
??面通过一个例子来说明查询优化的必要性:;【例5.1】在关系模式S(学生),C(课程),SC(选课)中,查询修读课程号为C5的所有学生姓名。此查询的SQL查询语言的语句形式为:
SELECT S.Sname FROM S,SC WHERE S.Sno=SC.Sno AND SC.Cno=C5;
系统可以有多种等价的关系代数表达式来完成这一查询。例如可以写出下面3种表达式:
Ql = πSn(σS.Sno = SC.Sno∧SC.Cno=C5(S×SC));
Q2 = πSn(σSC.Cno=C5(S SC));
Q3 = πSn(S σSC.Cno=C5(SC))。
;下面用简单的方法来计算这3种表达式的查询所需时间。在计算前先作如下的统一约定:
设S有1000个元组,SC有10000个元组,其中修读C5的元组数为50。
磁盘中每个物理块能存放10个S元组,或100个SC元组。
内存有6个块的缓冲区,其中5块可以存放S元组,1块存放SC元组。
读/写一块磁盘的时间为1/20秒,即1秒读写20个磁盘块。
为了简化起见,所有内存操作所花的时间忽略不计。
;计算Q1的查询时间
首先做笛卡尔乘积
将S与SC的每个元组相连接,其方法为先读入S中的50个元组(5×10)至s表中的内存缓冲区,然后不断地将SC的元组按100位一块读入后与S的元组相连接,直至读完所有SC元组(共计100次)。这种操作内连接满100位后就写中间文件一次。反复进行这样的操作,直至做完笛卡尔乘积,此时共读取总块数为:
1000/10+1000/(10*5)+1000/100=100+20*100=2100块
其中读S表100块,读SC表20次,每次100块。由于每块花费时间1/20秒,此时总共花费时间105秒。连接后的元组数为103x104=107,设每块(约)能装10个元组,则写入中间文件要花106/20=5×l04S。
;计算Q1的查询时间
其次做选择操作
从中间文件中读出连接后的元组,按选择要求选取记录(此项为内存操作,时间可忽略否计),此项操作所需时间与写入中间文件时间一样,即5×l04S。满足条件的元组假设为50个,均放在内存。
最后做投影操作
第二项操作的结果满足条件的元组数为50个,它们可全部存放在内存。对他们在S上做投影操作,由于是在内存中进行,其时间可忽略不计。这样Ql的全部查询时间约为10+2*5*l04≈l05S。注意到一天为86400s,所以这个运算需要超过一天的时间来完成。
;计算Q2的查询时间
计算自然连接:计算自然连接时读取S与SC表的方式与Q1一致,总读取块数为2100块,花费时间为
文档评论(0)