- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第八章 查询处理.ppt
* 第八章 查询处理 查询处理通常包括以下三个阶段: 1.把由诸如SQL语言编写的查询程序,转化为一种能有效地描述查询结构的分析树。 2.把分析树转化为一种表示关系代数的符号树,即逻辑查询方案。 3.把逻辑查询方案转化为物理查询方案。即不仅说明其查询过程,而且指出其查询规则。这个规则贯穿于查询过程的每一步中。 SQL语法 查询体(Queries):Query用来表示一个查询。其语法定义如下: Query::=SFW Query::= (Query) SFW ::= SELECT SelList FROM FormList WHERE Condition (Select-lists): SelList ::= Attribute ,SelList SelList ::= Attribute (From-lists): FromList ::= Relation,FromList FromList ::= Relation 条件子句(Conditions), Condition ::= Condition AND Condition Condition ::= Tuple IN Query Condition ::= Attribute = Attribute Condition ::= Attribute LIKE Pattern Tuple ::= Attribute Pattern可用SQL中规定的引用字符串来替换。 有两个关系: StarsIn (title, year, starName) MovieStar (name , address , gender , birthdate) 建筑在这两个关系上,现有一段SQL程序如下: SELECT title FROM StarsIn WHERE starName IN ( SELECT name FROM MovieStar WHERE birthdate LIKE ‘%1960’ ); SELECT title FROM StarsIn, MovieStar WHERE starName=name AND birthdate LIKE ‘%1960’; 不使用子查询的方案 预处理程序 首先基于分析树进行语义检查。其过程归纳为: 1. 关系检查:所有在FROM子句中提及的关系都必须是查询执行模式中的关系或视图。例如,对图8.2所示的分析树,预处理程序将检查StarsIn和 MovieStar两个关系,以及在两个查询范围列表中提及的关系,在数据库模式中是否是合法的。 2. 属性检查:所有在SELECT子句或WHERE子句中提及的属性都必须是这些关系中具有的属性的子集。如图8.2中第一个选择列表中的属性title应是关系StarsIn或starIn中定义的属性。这里title是starIn的属性。这样,预处理程序确认使用的title是有效的。 3.类型检查:每个属性都必须符合所使用场合的类型要求。例如,图8.2中对birthdate使用了LIKE比较操作,则birthdate 应是字符串或可以被强制转化为字符串。birthdate是日期型,SQL中的日期型通常被看作字符串,故属性birthdate的使用得到确认。 从分析树到查询方案的转换 SFW结构分析树转换规则。 如果有一个查询体Query是一个SFW结构,且该结构的条件子句中不包含有子查询,则可以自下而上的用关系代数表达式替代查询体的全部结构。其替代过程如下: 步骤1. 查询范围列表中列出的所有关系之间的乘积将作为步骤2操作的对象; 步骤2. 执行一个选择操作σC,其结果将作为第三步操作的对象。这里C表示查询结构中的条件表达式。 步骤3. 执行一个投影操作πL ,这里L是选择列表中的一组属性。 不过,将SFW结构的转换规则应用到程序一的子查询中, 可以得到关系代数表达式πname(σbirthdate LIKE %1960(MovieStar))。□ 许多规则可用来改进逻辑查询方案,在此,我们只列出几个要点: 1)把每个选择操作σC1AND…ANDCn(E)变换为:σC1(…(σCn(E))…);(目的是使选择操作可以灵活方便地沿查询树下移)。 2)把查询树上的每个选择操作移到尽可能靠近叶节点(目的是使选择操作尽早执行)。 3)把查询树上的每个投影操作移到尽可能靠近叶节点(目的是使投影操作尽早执行)。 4)把串接的多个选择或多个投影操作组合为单个的选择或投影操作(目的是使多个选择或投影操作只需一次关系扫描就可完成)。 5)重新安排叶节点,使得具有最小选择操作的叶节点最先执行。最小选择操作是指具有最小结果关系的选择操作。选择操作结果关系的大小可以根据数据字典提供的信息预先估计出来。本步的
文档评论(0)