- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第15讲 关系查询与优化
实例
应用实例
假设学生-课程数据库中有1000个学生,10000个选课记录,其中选修“c02”课程的记录为50个。
一个磁盘块能存储10个S元组,或100个SC 元组。
用SQL语句表达查询:选修了“c02”课程的学生姓名。
用多种等价的关系代数表达式来完成这一查询。
分析该查询在不同存储结构和索引结构的磁盘I/O次数。
实例
【例】查询选修了“c02”课程的学生姓名
? Q1: SELECT SN
FROM S,SC
WHERE S.Sno=SC.Sno
AND SC.Cno= c02 ;
Q2: SELECT SN
FROM S
WHERE Sno IN (SELECT Sno
FROM SC
WHERE Cno=‘c02’);
实例
【例】查询选修了“c02”课程的学生姓名
?
π Sn (бS.Sno=SC.Sno ∧SC.Cno=2 (S×SC))?
π Sn (бSC.Cno= 2 (S ? SC))
π Sn (S ? бSC.Cno= 2 (SC))?
关系查询与优化
查询处理步骤
查询优化技术
代数优化
物理优化
查询语句
查询解析器
查询分析
查询预处理器
关系代数查询树
查询优化器
查询计划的执行代码
执行引擎
执行结果
查询预处理
查询优化
查询执行
数据字典
数据库系统的查询处理步骤
SELECT Sn
FROM S,SC
WHERE S.Sno=SC.Sno
AND SC.Cno= c02 ;
语法分析树
关系代数优化查询树
查询代码生成器
生成执行代码
查询处理器的组成和查询处理的典型步骤
查询分析与预处理
查询分析
接受类似SQL这样的高级查询语言表示的查询,并进行词法分析和语法分析。
【例】在“学生-课程”数据库中查询选修了课程号为“c02”课程的学生姓名。
查询分析与预处理
? Q1: SELECT SN
FROM S,SC
WHERE S.Sno=SC.Sno AND SC.Cno= c02 ;
Q2: SELECT SN
FROM S
WHERE Sno IN (SELECT Sno
FROM SC
WHERE Cno=‘c02’)
【例】在“学生-课程”数据库中查询选修了课程号为“c02”课程的学生姓名。
查询分析与预处理
用查询语句Q1实现两个关系的连接查询的语法分析树
【例】在“学生-课程”数据库中查询选修了课程号为“c02”课程的学生姓名。
查询分析与预处理
用查询语句Q2实现两个关系的嵌套查询的语法分析树
查询分析与预处理
查询有效性检查
根据数据字典对合法的查询语句进行语义检查。
检查语句中的数据库对象在所查询的特定数据库模式中是否为有效且有语义含义的名字。
检查所有属性的类型是否与其使用相对应,以及根据数据字典中的用户权限和完整性约束定义对用户的存取权限进行检查。
查询分析与预处理
生成关系代数初始查询树
查询预处理器采用一些相应的规则,用一个或多个关系代数运算符替换语法树上的结点与结构,生成一个对应于SQL查询的关系代数初始查询树。
关系代数查询树是一个树数据结构,在查询树中,查询的输入关系表示为叶结点,关系代数操作表示为内部结点,一元关系操作符只有一个子结点,二元关系操作符有两个子结点。
查询分析与预处理
每个内部节点用关系操作符来标记,每个叶子结点用关系名来标记。一元关系操作符只有一个孩子,二元操作符有两个孩子。
Q1查询的关系代数查询树
【例】在“学生-课程”数据库中查询选修了课程号为“c02”课程的学生姓名。
Q1:πSN (бS.Sno=SC.Sno ∧SC.Cno=c02 (S×SC))
查询分析与预处理
Q2查询的关系代数查询树
【例】在“学生-课程”数据库中查询选修了课程号为“c02”课程的学生姓名。
Q2:πSN (S ?πSno(бSC.Cno= c02 (SC) ))
查询语句
查询解析器
查询预处理器
关系代数查询树
查询优化器
查询计划的执行代码
执行引
文档评论(0)