1、华中科技大学硕士学位论文嵌入式移动实时数据库管理系统查询优化方法研究姓名:周露申请学位级别:硕士专业:计算机软件与理论指导教师:徐丽萍20080528I 华中科技大学硕士学位论文 摘 要 嵌入式设备的大量普及,移动通信技术的快速发展,实时系统在日常生产生活中的广泛应用,导致了需要嵌入式设备管理的实时移动数据日益增多。在此背景下,结合了嵌入式系统、移动计算、实时系统及传统数据库特点的嵌入式移动实时数据库管理系统(EMRTDBMS)已成为数据库领域的新兴技术,其查询优化器的设计,要充分考虑到应用环境的变化,根据特点做出相应调整。 数据库管理系统(DBMS)的查询优化器以查询的语法树作为输入,经过预
2、处理、逻辑优化、执行计划选择等步骤,生成最终的执行计划。在此过程中,可以使用启发式规则和基于代价模型的优化技术,整个过程依赖于数据字典中的统计信息。 SPJ(Select-Project-Join)查询的逻辑优化主要包括连接顺序选择、选择下推和投影下推。其中条件表达式中的逻辑运算AND和OR会对选择条件下推造成影响,可以在预处理中将其变为范式形式。对比条件表达式的合取变换与析取变换得到的优化后的逻辑查询树,关系表达式的合取变换策略对后续优化有利。 嵌入式flash存储器、数据广播以及数据实时性导致传统代价模型在ERTMDBMS中并不适用。新代价模型能够考虑到EMRTDBMS的数据来源选择、fl
3、ash I/O 代价、数据广播开销以及数据截止期等影响EMRTDBMS查询代价的因素,一个类似于动态规划的执行计划选择算法能够在此代价模型的基础上完成逻辑优化和执行计划选择的过程。 通过仿真实验分析,查询条件的合取变换和类似动态规划的执行计划选择策略在参与连接的关系数量相对较小时能较好地完成EMRTDBMS的SPJ查询优化工作。 关键词:查询优化,合取范式,代价模型,执行计划选择 III 华中科技大学硕士学位论文 conjunctive normal form and the algorithm like dynamic programming for choosing the executi
4、on plan based on the new cost model can work well when the number of the relations is relative small. Key words: Query Optimization, Conjunctive Normal Form, Cost model, Execution Plan Choosing 独创性声明 本人声明所呈交的学位论文是我个人在导师指导下进行的研究工作及取得的研究成果。尽我所知,除文中已经标明引用的内容外,本论文不包含任何其他个人或集体已经发表或撰写过的研究成果。对本文的研究做出贡献的个人和
5、集体,均已在文中以明确方式标明。本人完全意识到,本声明的法律结果由本人承担。 学位论文作者签名: 日期: 年 月 日 学位论文版权使用授权书 本学位论文作者完全了解学校有关保留、使用学位论文的规定,即:学校有权保留并向国家有关部门或机构送交论文的复印件和电子版,允许论文被查阅和借阅。本人授权华中科技大学可以将本学位论文的全部或部分内容编入有关数据库进行检索,可以采用影印、缩印或扫描等复制手段保存和汇编本学位论文。 保密,在_年解密后适用本授权书。 不保密。 (请在以上方框内打“”) 学位论文作者签名: 指导教师签名: 日期: 年 月 日 日期: 年 月 日本论文属于 1 华中科技大学硕士学位论
6、文 1 绪 论 随着数字信息技术和网络技术的高速发展,后PC (Post-PC)时代已经来临。如今,嵌入式系统己经渗透到人们日常生活的方方面面。从各种PDA、掌上电脑到日常通信用到的各式手机,再到家用电器中的电视机、洗衣机、电冰箱,乃至作为交通工具的摩托车、小汽车,嵌入式系统已经在各个方面影响我们的日常生活。与嵌入式系统一样,无线通信技术也在近些年得到飞速发展,各种技术、标准、协议的层出不穷,通信带宽不断增大,通信质量逐步提高,各种移动通信概念走进千家万户,改变着我们每天的生活。 嵌入式系统和无线通信网络技术相结合,就出现了移动办公、移动通信等崭新的移动服务理念。特别是伴随着硬件的飞速发展,移
7、动处理器运算能力日益增强,单位存储单元价格迅速下降,移动设备对数据的存储和管理能力已日益强大。而且,随着人们日常生活节奏加快,以及各种生产活动对质量要求的进一步提高,诸如实时股票交易系统、实时监控系统、实时工业控制系统等实时应用也步入我们的日常工作与生活。所有变化都对信息的获取手段、存储方式、处理技术提出了全新的要求,它意味着作为普通终端的智能手机、掌上电脑、PDA及各种监控设备除了提供传统功能以外,还必须能够存储和管理越来越多的移动和实时数据。然而,如果针对单个应用开发数据存储管理系统,不仅开发时间长,开发难度大,而且缺乏统一的接口,使用和移植都存在较大问题。因此,开发出一个能够在移动设备上
8、使用的实时移动数据库管理系统,并使用该系统来满足嵌入式移动实时环境的数据存储和管理要求,就成为了嵌入式系统软件开发的一个重要内容。 随着社会信息化进程的逐步深入,各种应用需求的不断提出,嵌入式移动实时数据库管理系统必将在电子商务、实时环境监测、移动办公及军事上得到广泛应用。 2 华中科技大学硕士学位论文 1.1嵌入式移动实时数据库管理系统 1.1.1 嵌入式移动实时数据库管理系统体系结构 嵌入式移动实时数据库管理系统是指在移动计算环境下,支持实时、移动数据管理和操纵,应用于工业控制、移动通信、掌上电脑、PDA等嵌入式设备上的数据库管理系统。近年来,对嵌入式实时移动数据库管理系统的研发越来越引起
9、人们的关注。因为需要嵌入式终端管理的实时、移动数据的数量在不断增加,数据结构日益复杂,需要有一个统一、有效数据管理系统来简化应用程序的开发。嵌入式移动实时数据库管理系统不仅要具备数据存储和操纵等传统数据库管理系统的基本功能,而且要满足移动计算环境,嵌入式系统的体系结构以及应用的实时性等新特点。 嵌入式实时应用的移动客户端一般是车载设备、PDA、智能手机等嵌入式设备,数据库系统嵌入到这些设备中,运行于嵌入式操作系统(如Linux、WinCE、VxWorks等)之上。 其体系结构与传统的数据库系统有较大差别,目前较为常用的嵌入式移动实时数据库管理系统的结构1,2由Imielinski结构发展而来,
10、其体系结构如图1.1所示。 系统由固定网络及移动网络两大部分组成。固定网络由一组移动服务基站MSS(Mobile Server Station)、信息服务器IS(Information Server)、位置服务器LS(Location Server)、以及固定主机FH(Fix Host)构成,它们通过WAN或其它有线网络连接,数据分布于IS和MSS中;移动网络由一系列相交或者不相交的无线广播单元WBU(Wireless Broadcast Unit)构成,每个WBU由一个MSS支持,并且由一组移动客户MC(Mobile Client)组成,每个MC为一个嵌入式移动设备,它可以跨单元移动。 1.
11、1.2 嵌入式移动实时数据库管理系统的特点 与传统数据库管理系统相比,嵌入式移动实时数据库管理系统除了具有数据存储和操纵功能,基于其特定应用背景,还具有如下特点3: 3 华中科技大学硕士学位论文 1) 移动性:移动主机不仅可以在不同的地方连通网络,而且在移动的同时也可以保持网络连接。 2) 频繁断接性:移动主机一般不能保持持续联网的工作方式,而是主动或被动的间隙性入网、断接。而且,即使处于连接状态,不同时间的网络状况(如带宽、通信代价、网络延迟等)也是变化的。 3) 网络通信非对称性:由于物理通信媒介的限制,一般下行链路(服务器端到移动客户端)的通信带宽与代价远大于上行链路(移动客户端到服务器
12、端)。 4) 资源有限性:移动主机CPU的运算能力、内存容量、存储器的大小及电源的能力都远不及固定主机。其数据缓存的数量和应用规模受到很大限制。 5) 实时性:在移动主机上运行的事务和管理的数据都有显式时间限制,系统的正确性不仅依赖于事务的逻辑结果,而且依赖于该逻辑结果产生的时间。 以上就是嵌入式移动实时数据库管理系统不同与传统数据库管理系统的几大特点,因此,嵌入式移动实时数据库管理系统在设计和实现上都与传统数据库管理系Fix Network(WAN/Intranet/ATM etc.) IS MSS MSS ERTDBMS ERTDBMS LDB ERTDBMS LDB MC MC MC M
13、C MC ERTDBMS RepDB ERTDBMS RepDB Wireless Broadcast Unit Wired Connect Wireless Connect 图1.1 嵌入式移动实时数据库的系统模型 IS LS MSS Disconnect FH LDB 4 华中科技大学硕士学位论文 统有着较大的区别。 1.1.3 嵌入式移动实时数据库管理系统现状 实时数据库系统受到了数据库和实时系统两个领域研究人员的关注。实时数据库在数据特征与事务模型4、事务的优先级分派、调度和并发控制协议与算法5,6,7;数据恢复、查询处理及其优化等方面已取得了一些成果。 对于嵌入式移动数据库,目前的市
14、场上已经有了一些解决方案。如Sybase公司的移动数据库iAnywhere,IBM公司的关系型数据库DB2的卫星版及漫游版、Informix公司的Cloudscape 、Oracle 9i数据库的Lite版本、Berkeley DB和SQLite等。在国内市场,有人大“小金灵”和东大阿尔派的Openbase在嵌入式移动环境下的解决方案。但是,这些数据库产品往往只能支持嵌入式移动环境,对实时事务的支持往往不够。目前,还没有能够支持嵌入式、实时、移动环境的数据库管理系统。因此,急需开发出一种能够应用于上述三种环境的数据库管理系统来满足日益增长的应用需求,这也正是本课题的研究意义所在。 1.2数据库
15、管理系统查询优化的研究进展 1.2.1数据库管理系统查询优化的目的 关系数据库系统一个主要功能就是让用户通过关系数据库的标准查询语言SQL8来访问和修改数据。SQL作为关系数据库查询语言的国际标准,向用户提供了一个易于使用的、非过程化的、描述性的语言来存取其中的数据。大多数商用数据库产品(如Oracle, SQL Server, Sybase, IBM DB2等)都采纳了这一国际标准,用户借助于SQL语句,可以完成对数据的复杂操作。 查询是数据库系统中最基本、常用的一种操作,因此,查询是否具备较高的执行效率和较短的响应时间,已成为数据库管理系统的设计者和用户所共同关注的问题。由于同一个关系存在
16、着不同的存取方法,两个关系连接存在着不同算法,多个关系连接存在着不同顺序,因此,对于一个给定的查询通常会存在很多等价的执行计划,5 华中科技大学硕士学位论文 这些执行计划的输出结果相同,但是执行的时间效率、空间开销往往差别很大。因此,为了提高数据库系统的性能,进入数据库管理系统的查询必须首先进行优化处理。从各种数据库管理系统的产品在市场上多年的表现来看,成功的大型商用数据库管理系统往往具备高效的查询优化器。 1.2.2数据库管理系统的查询处理流程 数据库管理系统中对于用户查询的处理是通过查询处理器来完成的。如图1.2所示为一般的查询处理器的结构,它主要分为两个部分: 查询请求查询分析器查询预处
17、理器查询优化器语法树查询编译器执行引擎执行器执行计划 预处理后的语法树 图1.2 数据库管理系统查询处理器过程 1) 查询编译器:它将查询翻译成数据库管理系统的内部可计算的形式,称为执行计划,查询编译器主要包括三个部分: (1) 查询分析器:它由文本形式的查询出发,建立一棵查询的语法树结构。 (2) 查询预处理器:它对查询进行语义检查(例如,查询中所提到的关系是否都确实存在),并进行某些树结构转换,例如对查询的选择条件进行预处理,实现View功能,对嵌套查询进行重写等功能,其输出为处理后的语法树。 (3) 查询优化器:它将处理后的语法树转换称为对于实际数据有效的操作序列,也就是执行计划。查询优
18、化器包括了逻辑优化和物理优化两个部分,在优化过程中会充分利用数据字典中的信息来进行最优计划的选择。 2) 执行引擎:它负责执行查询计划中的每个步骤。执行引擎与DBMS中大多数的其他成分都有交互。例如,为了对数据进行操作,必须将数据从外存读入缓冲区;为了决定不同事务操作的执行顺序,需要和数据库管理系统的事务管理器及并发控6 华中科技大学硕士学位论文 制部分进行交互;为了避免访问被加了锁的数据,需要和并发控制部分进行交互;为了确保对于数据库的所有修改都正确地记了日志,需要和日志管理器进行交互。当执行计划中的所有的操作都被执行引擎处理完毕之后,才能够得到查询结果。 查询优化器的主要功能是将语法树转换
19、为效率较高的执行计划。不同的系统对查询优化器的具体实现不同,但一般来说,大多数查询优化器的结构如图1.3所示: 逻辑优化优化后的逻辑查询计划操作代价估计数据字典物理优化语法树执行计划启发式规则(改善查询的代数定律)中间结果大小估计物理计划的枚举启发式规则逻辑查询计划图1.3 数据库管理系统查询优化器的结构 由图1.3可以看出,查询优化器在进行处理时一般分为三个步骤: 1) 语法树到逻辑树的变换。 2) 逻辑优化。根据启发式规则(关系代数的12条代数定律)对逻辑查询树进行变换,或者根据代价模型(例如中间结果的大小)从众多等价的逻辑查询计划中选择能够生成更加有效执行计划的方案。 3) 执行计划生成
20、。主要使用执行计划枚举的方法,对于逻辑计划中的每一个操作,根据数据的存取路径、扫描方式、连接算法等信息对操作的可能执行方案进行枚举,最后由每个节点的执行计划形成一个组合,称为执行计划。通常这样的执行计划会有很多个,需要对每个执行计划进行代价估算,从中选择代价最小的一个。在此过程中,可以使用一些启发式规则减小计划枚举的空间。 1.2.3国内外研究现状 查询优化的研究始于上个世纪70年代,目前研究领域已涉及查询优化器的各个7 华中科技大学硕士学位论文 方面。总的来说,查询优化器的功能是为执行引擎提供输入,该输入能够使数据库查询的吞吐量和平均响应时间达到最优。因此,查询优化的过程就是搜索最优执行计划
21、的过程,为达到这个目标,优化器必须满足以下三个要求9,而且,众多研究也主要围绕这些问题来展开: 1) 一个包含了最小执行计划的搜索空间。 2) 一个准确的代价估计模型。 3) 一个高效的枚举算法。 IBM公司的System-R项目10极大地推进了关系数据库查询优化的研究,该系统中提出了关系数据库数据访问方法选择的技术11,目前该技术已被广泛的应用于商用优化器。在System-R系统中,SPJ查询的搜索空间被限制为由线性连接顺序组成的操作树,又称为“左深树”,连接算法可以选择嵌套循环或是排序连接,对于关系的扫描,能够使用索引(聚簇的或是非聚簇的)或是顺序扫描。对于代价估计,System-R的代价
22、包括了每步操作的输出数据大小,输出数据是否排序及操作的开销估计三项。,System-R在枚举算法方面使用了两项重要的技术:一是动态规划算法,二是记录结果中的“兴趣顺序”。 在System-R系统中,对于两个执行计划代价比较,只有在表示相同的表达式并且“兴趣顺序”相同时才会进行。在随后的研究中,“兴趣顺序”被泛化为“物理属性”12,广泛地应用于现代优化器中。 优化器的搜索空间不仅依赖于关系代数等价变换规则的数量,还决定于执行器所实现的操作算法的种类。同时,关系的连接顺序,是否推迟笛卡尔积运算也是影响搜索空间的重要因素。一般的优化器都采用“左深树”的线性顺序和推迟笛卡尔积的策略。文献13则在一个扩
23、展的系统中提出了基于查询来选择是否采用“丛生树”策略。对于外连接,其运算不满足交换率。而然,可以采用“连接先于外连接”的规则对含外连接的顺序进行重新排列,文献14给出了基于代价的外连接变换算法。对于查询中含有Group-By子句的情况,一般是将Group-By放在所有的连接之后完成。但是如果能够将Group-By运算先于连接完成,则能大大减少参加连接的元组的数量,文献15,16,17,18提出了“上拉”Group-By的等价变换规则,对于这一问题的8 华中科技大学硕士学位论文 进一步研究,文献19给出了一个综述。 对于复杂查询合并的问题,当查询中存在视图时,如果视图定义为简单SPJ查询,那么将
24、视图替换为查询后即可对连接顺序进行调整。但是当视图的定义比SPJ查询要复杂时,则不能如此。文献20提出了当视图中存在Select Distinct关键字时如何“上拉”Distinct的办法,文献18则提出了当视图中存在Group-By时的处理办法。对于复杂查询中含嵌套子查询的情况,较难处理的是含有相关子查询的嵌套查询,文献21给出了将相关嵌套子查询扁平化的方法。文献22首次提出了使用代数学的视角解嵌套的思想,文献24提出了在保证查询语义不变的情况下将聚集“上拉”的技术。文献23则提出了一种将嵌套子查询转换为“Table-Expression”或是视图的方法,该方法在文献24中得到了进一步的强化
25、。“半连接”的优化技术也在嵌套子查询的合并中得到了广泛应用,文献25中提出了利用“半连接”技术来优化含有视图或是嵌套子查询的技术。 对于代价估计的研究,主要解决两个问题:一是怎样获取数据库中存储数据的统计信息;二是如何根据物理操作的输入数据,估算结果的大小和执行时间。针对基本数据的统计信息获取,文献26提出了数据直方图的概念,由于数据库中的数据列之间往往存在相关性,文献27,28又进一步提出了二维直方图的概念。当数据库系统中管理的数据量十分庞大时,直接计算统计信息会导致较大的开销,文献29提出了利用部分样本数据估算统计信息的办法,文献30则提出了维护递增数据统计信息的方法。对于导出数据的估计(
26、例如选择操作结果的元组数量),文献31也给出了相应的估算策略。对于操作代价估算的问题,文献32提出,除了利用传统的参数进行估计以外,缓冲区的利用率对代价的精确计算也有着重要的意义。 对于一个给定的查询,搜索算法能在搜索空间中找到一个代价较小的执行计划。由于多连接查询优化在本质上就是组合优化的问题,因此搜索算法可以借鉴最优化理论来完成。目前,常用的算法有以下三大类:穷尽搜索算法、启发式算法、随机搜索算法。应用于System-R系统的动态规划就是典型的穷尽搜索,文献33对其进行了进一步的扩展和改进。穷尽式搜索的缺点是搜索空间大,效率比较低。因此,提出了基于启发式的搜索算法33,启发式搜索减少了搜索
27、空间,算法能够在恒定时9 华中科技大学硕士学位论文 间内完成,却不能保证得到最优执行计划。最常见的随机算法有模拟退火算法(SA)34、迭代改进(II)35、遗传算法(GA)36以及两阶段优化算法(2PO)。 在优化器的结构扩展方面,提出了两个比较意义的模型,分别是Starburst37和Volcano/Cascades38,39。针对分布式数据库的查询优化,Hasan40发现不同节点之间的网络通信的代价也是影响查询的主要开销之一,文献41通过XPRS试验系统提出了分布式数据库的两阶段优化策略。 在移动数据库的查询优化方面,文献42提出了基于公共子表达式的多重查询优化技术。在内存数据库的查询优化
28、方面,文献43提出了基于SB*树的内存数据库逻辑优化策略。针对嵌入式实时数据库系统的特点,文献44提出了一种新的连接顺序优化算法 (Greedy Iterative Improvement, GII)。该算法结合了贪婪算法和迭代改进算法的优点,能满足系统的实时要求,可以控制查询优化时间,比传统的查询优化策略能更好地适应不同事务类型的需要。 总之,在数据库管理系统的查询优化领域,已经取得了丰硕的成果,以上列举的思想、方法、技术仅仅是沧海一粟。然而,随着数据库管理系统在新环境中的使用(例如在嵌入式、实时、移动环境中),查询优化也面临新的问题,因此,根据应用环境对现有的查询优化技术进行调整也就成为了
29、新的数据库管理系统研发的重要任务。 1.3本文内容与组织结构 本论文的组织结构安排如下: 第一章介绍嵌入式移动实时数据库的理论和应用背景,并描述了查询优化器的结构及其研究现状。 第二章对查询优化的主要理论和技术进行了总结。主要内容包括关系代数的等价变换规则、统计信息以及获取技术、中间结果大小的估计、物理操作符的I/O预估、基于代价模型的执行计划选择及相关的启发式规则。 第三章以一个SPJ查询为例,介绍了嵌入式移动实时数据库管理系统逻辑优化的过程,主要介绍了查询条件合取变换的过程。 10 华中科技大学硕士学位论文 第四章分别从嵌入式、实时和移动三个方面分析了新的应用环境对嵌入式移动实时数据库管理
30、系统数据特征的影响。根据影响嵌入式实时移动数据库代价的诸多因素,给出了一个适用于嵌入式移动实时数据库管理系统查询优化的代价模型及相应的查询计划选择算法。 第五章根据上两章提出的算法,设计了两个仿真实验,对算法的正确性和性能进行了验证和分析,得出了该优化器的设计方案能够完成嵌入式移动实时数据库管理系统的查询优化任务的结论。 第六章对全文工作进行总结,并指出以后研究工作的方向。 11 华中科技大学硕士学位论文 2 查询优化的基本方法 整个优化过程一方面在关系代数级别发生,即优化器要找到一个与给出的关系代数表达式等价,但更为有效的逻辑计划。另一方面在物理层面发生,即为逻辑计划生成一个有效的执行计划。
31、在查询表达式的变换过程中,需要依赖于关系代数的等价规则和操作结果大小估计。在由逻辑计划向执行计划的转换过程中,则需要对逻辑计划中不同物理操作的代价进行精确估计。不管是逻辑计划还是执行计划的选择,都可以使用基于代价模型或是启发式规则的方法。 2.1改进查询计划的代数定律 如果两个关系代数表达式的执行在数据库实例中产生相同的元组集,则我们称其为等价的45。等价规则,又称代数定律,能够指出两种不同形式表达式的等价性。优化器利用这些代数定律将表达式转换成逻辑上等价的其他形式。以下就是关系代数表达式的一些常用等价规则。、1、2表示谓词,L1、L2、L3等表示属性列表,而E、E1、 E2等表示关系代数表达
32、式。关系名r是关系代数表达式的特例。 1) 合取的选择运算可分解为单个选择运算的序列: 1212()()EE 2) 选择运算满足交换律: 1221()()EE 3) 一系列投影运算中只有最后一个运算是必需的,其余的可省略: 121()()nLLLLEE 4) 选择操作可与笛卡尔积及连接相结合: 121()EEE 2E 11(E 221)EE 122E 5) 连接运算满足交换律: (2-1) (2-2) (2-3) (2-4) (2-5) 12 华中科技大学硕士学位论文 1E22EE 1E 6) 连接运算满足结合率: 1(E2)E31EE 2(E3)E 1(E12)E 2331EE 132(E
33、23)E 对于(2-8)式,2只涉及E2及E3的属性。当条件为空时,连接即退化为笛卡尔积,因此,笛卡尔积也是满足结合律的。 7) 选择运算在以下两个条件下对连接运算具有分配律: (1) 选择条件0的所有属性只涉及参与连接运算的表达式之一(如E1)时: 01(E 021)()EE 2E (2) 选择条件1只涉及E1属性,选择条件2只涉及E2的属性时: 121(E 121)()EE 22()E 8) 投影运算在下面的条件下对连接运算具有分配率: (1) L1、L2分别代表E1、E2的属性,条件只涉及L1L2中的属性: 121(LLE 121)()LEE 22()LE (2) L1、L2分别代表E1
34、、E2的属性; L3是E1中出现在连接条件中但不在L1L2中的属性; L4是E2中出现在连接条件中但不在L1L2中的属性: 121(LLE 1321)()LLEE 242()LLE 9) 集合的并与交满足交换律,但集合的差运算不满足交换律: E1E2 =E2E1 E1E2 =E2E1 10) 集合的并与交满足结合律: (E1E2)E3=E1(E2E3) (E1E2)E3=E1(E2E3) (2-6) (2-7) (2-10) (2-12) (2-13) (2-14) (2-15) (2-16) (2-8) (2-9) (2-11) 13 华中科技大学硕士学位论文 11) 选择运算对并、交、差运
35、算具有分配律: P (E1E2)= P (E1)P (E2) P (E1E2)= P (E1)P (E2) P (E1E2)= P (E1)E2 P (E1-E2)= P (E1)- P (E2) P (E1-E2)= P (E1)- E2 12) 投影运算对并运算具有分配律: L(E1E2)= L(E1)L(E2) 以上列出的这12条代数定律只是关系代数等价规则的一部分,还有其他涉及到扩展关系代数运算符的等价规则一般在更复杂的查询优化中用到。 2.2操作代价估计 不管是逻辑计划的选择,还是执行计划的生成,都必须依赖于操作代价估计。操作代价的准确估计往往要基于一些参数,这些参数要么由精确计算得
36、到,要么由“统计量收集”过程来估计。有了这些参数,不仅能估计操作结果的大小,而且能对各操作的不同实现算法进行代价评估。 2.2.1统计量获取 为了对操作代价进行顺利估计,在数据库管理系统的数据字典中,一般应该保存以下这些统计信息: 1) T(R)为关系R的元组数。 2) B(R)为关系R中元组的磁盘块数。 3) L(R)为关系R中每个元组的字节数。 4) F(R)为关系R的块因子,即一个磁盘块能容纳的关系R中的元组的个数。 5) V(R,A)为关系R的属性A上所具有的不同值的数目。 6) Min(R,A)为关系R中属性A的最小值。 7) Max(R,A)为关系R中属性A的最大值。 以上是与关系
37、R相关的统计信息,同理,对于索引,也应该有相同的统计信息,(2-17) (2-18) (2-19) (2-20) 14 华中科技大学硕士学位论文 如索引的高度、索引中叶节点的页数、索引关键字的取值的计数、索引所占的磁盘块数等,就不一一列举了。这些信息对于代价来说非常重要,但是还相对简单,为了提高代价估计的精确度,现实中的优化器往往还要维护更深入的统计信息,例如直方图。 在直方图中,每个属性的取值被分成若干区间,对于每个区间,直方图将属性落在该区间中的元组的个数与该直方图相关联。直方图维护的统计信息较为详尽,占据的空间也少,数据库管理系统中使用的主要是等宽和等深直方图。 统计量的获取,对于元组数
38、量较小的关系,可以通过元组遍历的方式来进行,如果元组规模非常庞大,遍历方式会带来巨大的开销,此时一般采用部分采样的方式进行估算。 对于统计信息的维护问题,如果要维护精确的统计信息,则数据库每次修改时必须同时刷新统计信息的值,这样会带来较大的系统开销。一般数据库系统会在负载比较轻的情况下或是由管理员手动来刷新统计信息。 2.2.2操作结果大小估计 中间结果的大小是影响逻辑计划代价的重要因素,因此,估计逻辑计划中每个操作结果大小就显得十分重要。而且,一个中间结果的大小并不依赖于计算该中间结果采用的方式(如多关系连接的结果大小不依赖于连接计算的顺序),这个结论保证了中间结果大小估计的一致性。以下就是
39、一些适合于大多数情况的估计准则。 1) 投影大小的估计 投影为每个输入元组产生一个结果元组,输出结果的元组长度发生变化。对于关系代数运算而言,投影运算会消除重复元组。因此,结果中元组的数目会比原来关系中的元组数目略小一点。形如A(R)的投影的计算结果的大小估计为V(R,A)。 2) 选择大小的估计 选择运算一般减少元组数目,而且运算结果的大小估计依赖于选择谓词,以下分单个等值谓词、单个比较谓词和谓词联合进行分析。 (1) 单个等值谓词:对于A=a(R)这样的等值谓词,假设取值均匀分布,则计算结15 华中科技大学硕士学位论文 果的估计为T(R)/V(R,A)。如果在属性A上有一个直方图,则可以首
40、先定位值a所在的区间,然后用该区间的频度计数代替T(R),用该区间中出现的不同的A的值来代替V(R,A)。 (2) 单个比较谓词:一般而言,对于A 3 OR (Sdept = CS OR (Score 60 AND Score 3 Sdept = CS Score 60 Score NodeType = Con then return /当节点为空或是单个选择条件式,算法返回 endif if pLogicRoot-NodeType = OR then if pLogicRoot-pLeft-NodeType = AND / OR节点左孩子为AND节点的情况 then RightCopy*(p
41、LogicRoot-pRight) /拷贝节点的右子树到RightCopy pLogicRoot-NodeType AND /设置节点类型为AND pNodeAdd-pLeft pLogicRoot-pLeft-pRight pNodeAdd-pRight pLogicRoot-pRight pNodeAdd-op OR pLogicRoot-pRight pNodeAdd /将新增节点NodeAdd设为节点右子树pLogicRoot-pLeft-op OR /将节点左子树类型改为OR pLogicRoot-pLeft-pRight RightCopy /令节点右子树为RightCopy Fl
42、ag 1 /标记此轮处理中进行过变换 endif if pLogicRoot-pRight-NodeType = AND / OR节点右孩子为AND节点的情况 then LeftCopy *(pLogicRoot-pLeft) /拷贝节点的左子树到LeftCopy pLogicRoot-NodeType AND /设置节点类型为AND pNodeAdd-pLeft pLogicRoot-pLeft pNodeAdd-pRight pLogicRoot-pRight-Left pNodeAdd-op OR pLogicRoot-pLeft pNodeAdd /将新增节点NodeAdd设为节点左子
43、树 pLogicRoot-pRight-op OR /将节点右子树的类型改为OR pLogicRoot-pRight-pLeft RightCopy /令节点右子树为RightCopy Flag 1 /标记此轮处理中进行过变换 endif Conjunctive-Normal-Form(pLogicRoot - pLeft) /递归处理根节点的左子树Conjunctive-Normal-Form(pLogicRoot - pRight) /递归处理根节点的左子树 endif end Conjunctive-Normal-Form /*新增一个节点NodeAdd,令节点的左子树为节点左子树的右子树,右子树为节点的右子树*/ /*新增一个节点NodeAdd,令节点的左子树为节点的左子树,右子树为节点右子树的左子树*/