数据库上课 第十三讲 查询处理、优化.ppt

数据库上课 第十三讲 查询处理、优化.ppt

  1. 1、本文档共77页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据库上课 第十三讲 查询处理、优化

3.1.3查询优化的总目标: 选择有效的策略 求得给定关系表达式的值 使得查询代价最小(实际上是较小) 3.2 查询优化的类型 逻辑优化:产生逻辑上与给定关系代数表达式等价的表达式; 代价估计:基于系统收集的一些统计信息,如关系的大小、属性值的分布、B+树索引的深度等,对一个执行计划的代价进行事先估计。 物理优化:对所产生的表达式以不同方式作注释,产生不同的查询执行计划。 在查询优化器中第1步和第3步是交叉进行的 * * 3.2.1 代数优化 定义:基于关系代数等价变换规则的优化方法。 方法: 关系表达式转换(参看课本本章和关系代数一章) 查询树的启发式优化 优化重点:连接运算的次序 一个好的连接运算次序对于减少中间结果的大小非常重要,也会影响到连接算法的选择。 大部分查询优化器在连接运算的次序上花了很多功夫。 * * 例 找出2008级修读“数据库系统概论”课程的学生姓名。初始关系表达式为: ∏studentName(σgrade=2008∧courseName=DB((Class ? Student) ? (Score ? Course))) 转换后的关系代数表达式为: ∏studentName((σgrade=2008(Class) ? Student) ? (Score ? σcourseName=DB(Course))) 3.2.2 代价估计 一个运算的代价依赖于它的输入的大小和其他统计信息。因此,给定一棵查询树,要估计上一层某个运算的代价,首先需要估计其下层运算的中间结果集的大小。 结果集大小的估计需要用到存储在数据库的数据字典中的有关统计信息,现实数据库系统中需要维护更详细的统计信息,以提高代价估计的精确度。 大多数数据库系统中将每个属性的取值分布存储成一张直方图。 选择和连接运算的估计 选择运算结果大小的估计 选择运算结果大小的估计依赖于选择谓词。 等值谓词选择运算σA=a 比较谓词选择运算σA≤v 连接运算结果大小的估计 * * 3.2.3 物理优化 物理优化就是要选择高效合理的操作算法或存取路径,求得优化的执行计划。 主要方法: 基于代价估算的优化 基于规则的启发式优化 两者结合的优化方法 例: * * 1)基于代价的优化 基于代价的优化器(cost-based optimizer,CBO)通过使用等价规划从给定的查询语句产生一系列查询执行计划,并选择代价最小的一个。对于一个复杂的查询,等价于给定查询的不同执行计划可能很多。。 基于代价的优化器在实际应用中,不可能也没必要对所有可能的执行计划进行穷举搜索(这样将会导致不可接受的优化代价,即为了寻找最佳执行计划而花费的代价过高) 通常都是采用各种剪枝的技术进行局部搜索,以寻找接近最优的执行计划。 * * 2)基于规则的启发式优化 目标: 减少中间结果的大小 减少不相关的数据运算 减少扫描表的次数 减少不相关元组的读取 * * 一般准则 选择操作尽可能先做 目的:大大减少中间结果的大小 执行连接前对关系适当地预处理 两种预处理方法:在连接属性上建立索引和对关系排序 目的: 减少扫描表的次数 减少不相关元组的读取 投影运算和选择运算同时进行 目的:避免重复扫描表 投影同其前或其后的双目运算结合起来 目的:避免重复扫描表 * * 把某些选择同在它前面要执行的笛卡尔积结合起来成为一个连接运算 目的:减少内外存交换的信息量 找出公共子表达式 目的:减少计算量 * * 常用的关系代数表达式的启发式方法 针对一棵语法树,有下列常用的启发式: 选择操作下移 投影操作下移 选择和投影的串接合并 … * * 3.3 多连接查询优化 * * 逻辑优化 查询 请求 代价最小 等价变换规则集 等价的 JOIN树集合 物理优化 等价的QEP R1 R3 查询图 A B R2 join join R3 R2 R1 join树 Sort-merge Nested-loop R3 R2 R1 操作树 物理操作集 3.4 一个实例 求选修了2号课程的学生姓名。用SQL表达: SELECT Student.Sname FROM Student,SC WHERE Student.Sno=SC.Sno AND SC.Cno=‘2’; 假定学生-课程数据库中有 1000个学生记录 10000个选课记录 其中选修2号课程的选课记录为50个 可以用多种等价的关系代数表达式 1)Q1=Πsname(σstudent.Sno=sc.Sno∧sc.Cno=2 (student×sc)) 2)Q2=Πsname(σsc.Cno=2 (student SC)) 3)Q3=Πsname(student σsc

文档评论(0)

cumhuatgw + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档