- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第13章: 查询处理 概述 查询代价度量 选择操作 排序 连接操作 其他操作 表达式计值 查询处理基本步骤 1. 词法分析与翻译 2. 优化 3. 计值 查询处理基本步骤 (续) 词法分析与翻译 将查询翻译成内部形式. 再翻译成关系代数表达式. 词法分析器检查语法, 验证关系 计值 查询执行引擎以查询计值方案为输入, 执行该方案, 并返回查询结果. 查询处理的基本步骤: 优化 关系代数表达式可能有许多等价表达式 例如, ?balance?2500(?balance(account )) 等价于 ?balance(?balance?2500(account )) 每个关系代数运算可以用多种不同算法来计算 从而每个关系代数表达式可以用多种方法求值. 在表达式上加标注以说明详细求值策略, 称为求值计划. 例如, 可利用balance上的索引来查找余额小于2500的账户, 或者也可以执行完全的关系扫描, 丢弃那些余额? 2500的账户 基本步骤: 优化(续) 查询优化: 在所有等价的求值计划中选择代价最低者. 利用数据库目录中的统计信息来估计代价 如每个关系的元组数, 元组大小等. 本章中我们研究 如何度量查询代价 关系代数运算的求值算法 如何将单个运算的算法结合起来以对整个表达式求值 在第14章中我们研究 如何优化查询, 即如何找到具有最低估计代价的求值计划 查询代价的度量 查询代价通常用回答查询所耗费总时间来度量 许多因素影响时间代价 磁盘存取,CPU, 网络通信 一般来说, 磁盘存取对代价起决定性作用, 并且相对容易估计. 磁盘存取代价的度量要考虑 寻址次数 * average-seek-cost 读块数 * average-block-read-cost 写块数 * average-block-write-cost 写一块的代价大于读一块的代价 写数据后要读回, 以确保写成功 查询代价的度量 (续) 为简单起见, 我们仅用磁盘块传送数作为代价的度量 忽略顺序与随机I/O之间的代价不同之处 也忽略CPU代价 代价依赖于内存缓冲区的大小 内存多可以减少磁盘存取数 可用于缓冲区的实际内存量取决于其他并发OS进程, 在实际执行之前难以确定 我们经常用最坏情形估计, 故假定只有操作所需的最小内存量可用 实际系统要考虑CPU代价, 区分顺序与随机I/O, 考虑缓冲区大小 在我们的代价公式中不包括将输出写到磁盘的代价 选择操作 文件扫描 – 定位并读取满足选择条件的记录的搜索算法. 算法A1 (线性搜索). 扫描每个文件块并测试所有记录是否满足选择条件. 估计代价(扫描磁盘块数) = br br 表示包含有关系r 的记录的块数 若选择是针对键属性的, 则代价 = (br /2) 找到记录后终止 线性搜索的可用性不受下列因素影响 选择条件 文件中记录的顺序 有无索引 选择操作(续) A2 (二叉搜索). 如果文件有序且选择条件是在排序属性上的相等性比较即可用. 假设关系的块连续存储 估计代价(扫描的磁盘块数): ?log2(br)? — 通过对块的二叉搜索来定位第一条元组的代价 再加上包含满足选择条件的记录的块数 第14章讨论如何估计这个代价 利用索引的选择 索引扫描 – 使用索引的搜索算法 选择条件必须针对索引的搜索键. A3 (候选键上的主索引, 相等). 检索满足对应等式条件的单个记录 Cost = HTi + 1 A4 (非键属性上的主索引, 相等). 检索多条记录. 记录位于连续的块上 Cost = HTi + 包含检索记录的块数 A5 (次级索引搜索键上的相等). 若搜索键是候选键则检索单个记录 Cost = HTi + 1 若搜索键不是候选键则检索多个记录 Cost = HTi + 检索到的记录数 可能非常昂贵! 各记录可能位于不同的块上 对每条检索到的记录都有一次块存取 涉及比较的选择 为实现形如?A?V (r ) 或者 ?A ? V(r ) 的选择, 可以使用 线性文件扫描或二叉搜索, 或者按如下方式使用索引: A6 (主索引, 比较). (关系在A上排序) 对?A ? V (r) 利用索引找到第一条 ?v 的元组, 再从该处顺序扫描关系 对?A?V (r) 顺序扫描关系直至第一条 v 的元组; 不用索引 A7 (次级索引, 比较). 对?A ? V (r) 利用索引找到第一条 ?v 的索引项, 再从该处顺序扫描索引, 查处指向记录的指针. 对?A?V (r) 只需扫描索引的叶页来找出指向记录的指针, 直至第一条 v 的项 在每种情况下, 检索被指向的记录时: 每条记录需要一次I/O 如果有很多记录需要取出, 则线性文件扫描可能更廉价! 复杂选择的实现
文档评论(0)