文档介绍:引言主要任务:1)对使用诸如SQL的某种语言所写的查询进行语法分析,)将语法分析树转换成关系代数表达式树(或某种类似标记形式),也称为逻辑查询计划3)逻辑查询计划转换为物理查询计划:a)指明要执行的操作b)找出这些操作执行的顺序c)执行每步所用的算法d)获得所存储数据的方法e)数据从一个操作传递到另一个操作的方式查询处理器的主要组成部分:查询查询计划元数据数据查询编译查询执行DBDBMS处理查询计划的过程是这样的:在做完查询语句的词法、语法检查之后,将语句提交给DBMS的查询优化器,优化器做完代数优化和存取路径的优化之后,由预编译模块对语句进行处理并生成查询规划,然后在合适的时间提交给系统处理执行,最后将执行结果返回给用户。在实际的数据库产品(如Oracle、Sybase等)的高版本中都是采用基于代价的优化方法,这种优化能根据从系统字典表所得到的信息来估计不同的查询规划的代价,然后选择一个较优的规划。虽然现在的数据库产品在查询优化方面已经做得越来越好,但由用户提交的SQL语句是系统优化的基础,很难设想一个原本糟糕的查询计划经过系统的优化之后会变得高效,因此用户所写语句的优劣至关重要。DBMS中的存储统计信息:有关关系的统计信息关系R中的元组数目含有关系R的元组的块数目关系R中每个元组的字节数关系R的块因子,即一个块中能存放的关系统计信息的维护􀂅每次关系修改时,更新统计信息􀂅系统处于轻负载时,更新统计信息查询处理的步骤:语法分析器与翻译器查询关系代数表达式优化器执行引擎查询结果执行计划db分析:例:SELECTSNAMEFROMS,C,==AME=‘DATABASESYSTEM’S=10000,C=1000,SC=100000查询方案:1)∏sname(=((sXc)Xsc))O=AME=‘DATABASESYSTEM)2)∏sname(AME=‘DATABASESYSTEM((s∞c)∞sc))3)∏sname(((s∞AME=‘DATABASESYSTEM(c))∞sc)):包是多重集SQL关系与集合的区别:1)关系是包2),交和差:::::::::,交和差:基于包的并,交和差的语义:1)R∪S:)R∩S:)R-S::如果R={A,B,B},S={C,A,B,C}是两个包那么: 1)R∪S=2)R∩S=3)R-S=考虑:S={C,A,B,B,C}时,: σc(R)产生由R中满足条件C的元组构成的包,结果关系的模式与R的模式一样. 例:: ∏L(R)是R在列表L上的投影,不去掉重复的元组. L的构成: 1):R的单个属性 2):表达式xy,其中x,y是属性名字列表,将x换名为y 3):表达式ez,例:(笛卡儿积) 如果R和S是关系,则R×S是一个模式中包含R的属性和S的属性的关系,在结果积中不去掉重复的属性. 例::∞ 1)自然连接R∞S 2)等值连接R∞S 3)θ连接R∞:δ(R)与distinct对应,是将包转换为集合的操作符SQL的UNION,INTERSET,EXCEPT均按集合方式理解,故转为包的表示时,:RUNIONS可表示为δ(R∪S):三要素:(1)聚集操作符:出现在SQL的SELECT中,对属性应用AVG,SUM,COUNT,MIN和MAX,产生相应的结果.(2)分组:出现在SQL的SELECT中,以GROUPBY方式,其主要作用为:1)对由FROM和WHERE所描述的关系按照GROUPBY后面的属性分组2)将聚集作用到每个分组上(3)HAVING条件:给出查询结果中的每个分组所必须满足的条件符号表示:(1)符号γ表示分组和聚集:γL(R)R是关系L是元素的列表:a)GROUPBY后面所跟的属性 b)聚集操作符,如SUM(X)SX(2)γL(R)的执行过程: 1),则整个关系R就是一个组. 2)对每一个组产生一个元组,它包括: a)该组的分组属性的值 b)根据列表L定义的聚集属性在该组中所有元组上得到的聚集例:(见书180图6-5)