哈尔滨网站设计快速建站,建立网站的目的是什么,北京软装设计公司前十名,ui设计培训排名9.1查询处理
一#xff1a;查询处理步骤
关系数据库管理系统查询处理可以分为4个阶段#xff1a;
查询分析查询检查查询优化查询执行
#xff08;1#xff09;查询分析
任务#xff1a;对查询语句进行扫描#xff0c;分析词法、语法是否符合SQL语法规则
如果没有语…9.1查询处理
一查询处理步骤
关系数据库管理系统查询处理可以分为4个阶段
查询分析查询检查查询优化查询执行
1查询分析
任务对查询语句进行扫描分析词法、语法是否符合SQL语法规则
如果没有语法错误转入下一步
如果有语法错误则在报告中显示错误
2查询检查
任务
对合法的查询语句进行语义检查即根据数据字典中有关的模式定义检查语句中的数据库对象如关系名、属性名是否存在和有效如果是对视图的操作则要用视图消解方法把对视图的操作转换成对基本表的操作还要对权限、完整性约束进行检查如果违反则拒绝查询检查通过后把SQL查询语句转化为内部表示也即等价的关系代数表达式在此过程中要把数据库对象的外部名称换为内部表示RDBMS一般用查询树又称为语法分析树来表示扩展的关系代数表达式
3查询优化
任务每个查询都会有许多可供选择的执行策略和操作算法查询优化就是选择一个高效执行的查询处理策略。按照优化的层次一般可以将查询优化分为
代数优化是指关系代数表达式的优化也即按照一定规则通过对关系代数表达式进行等价变换改变代数表达式中操作的次序和组合使查询更高效物理优化是指存取路径和底层操作算法的选择。选择依据可以是基于规则的(rule based)、基于代价的(cost based)、基于语义的(semantic based)
4查询执行
依据优化器得到的执行策略生成查询执行计划由 代码生成器(code generator) 生成执行这个查询计划的代码然后加以执行回送查询结果。 二实现查询操作的算法示例
1选择操作的实现
①全表扫描
优点只需要用很少的内存最少为1块就可以运行且控制简单。适用于规模较小的表
缺点对于规模大的表进行顺序扫描当选择率低时会使效率很低
②索引或散列扫描
思想如果选择条件中的属性上有索引例如B BB树索引或h a s h hashhash索引可以用索引扫描。通过索引先找到满足条件的元组指针再通过元组指针在查询的基本表中找到元组。 一般来说当选择率低于10%时建立索引才有意义
2连接操作的实现
①嵌套循环方法nested loop
思想对外层循环(Student表)的每一个元组检索内层循环(SC表)中的每一个元组并检查这两个元组在连接属性(Sno) 上是否相等。如果满足连接条件则串接后作为结果输出直到外层循环表中的元组处理完为止
②排序-合并方法sort-merge join
如果参与连接的表没有排好序首先对Student表和SC表按连接属性Sno排序
取Student表中第一个 Sno,依次扫描SC表中具有相同Sno的元组把它们连接起来
当扫描到Sno不相同的第 一个SC元组时返回Student 表扫描它的下一 个元组再扫描SC表中具有相同Sno的元组把它们连接起来
重复上述步骤直至Student扫描完毕
③索引连接index join
在SC表上已经建立了属性Sno的索引
对Student中每一个元组由Sno值通过SC的索引查找相应的SC元组
把这些SC元组和Student元组连接起来
循环执行第二步和第三步直至Student中的元组处理完毕
④哈希连接hash join
思想它把连接属性作为hash码用同一个hash函数把Student表和SC表中的元组散列到hash表中
划分阶段创建阶段即创建hash表。对包含较少元组的表( 如Student表)进行一遍处理把它的元组按hash函数(hash码是连接属性)分散到hash表的桶中试探阶段连接阶段对另一个表(SC表)进行一遍处理把SC表的元组也按同一个hash函数(hash 码是连接属性)进行散列找到适当的hash桶并把SC元组与桶中来自Student 表并与之相匹配的元组连接起来。 9.2查询优化
一查询优化概述
1查询优化的地位和重要性
关系系统的查询优化既是关系数据库管理系统实现的关键技术又是关系系统的优点所在。用户只要提出“干什么”而不必指出“怎么干”。 查询优化的优点不仅在于用户不必考虑如何最好地表达查询以获得较高的效率而且在于系统可以比用户程序的“优化”做得更好。
2执行代价
总代价I/O代价CPU代价内存代价通信代价 计算查询代价时一般用查询处理读写的块数作为衡量单位
问问老师这个例子需要理解吗真的好繁琐
9.3代数优化与查询树
1启发式规则
【规则1】选择运算应尽可能先做这是为了减少中间结果的规模【规则2】投影和选择运算同时进行这是为了避免重复扫描【规则3】将投影运算与其前后的双目运算结合起来这是为了避免重复扫描【规则4】把某些选择运算和其前面的笛卡尔积结合起来成为一个连接运算这是为了减少中间结果的规模【规则5】提取公共子表达式公因子这是为了保存计算结果避免重复计算
2实现算法输出优化查询树
【步骤1】分解选择运算这是为了便于不同的选择运算沿树的不同分枝向树叶移动一直移动到与这个选择条件相关的关系处使选择尽可能先做。 【步骤2】通过交换选择运算将每个选择运算尽可能移动到叶端利用规则4~9尽可能把选择移动到树的叶端 【步骤3】通过交换投影运算将每个投影运算尽可能移动到叶端利用规则3、11、10、5尽可能把投影移动到树的叶端 【步骤4】合并选择和投影的串接利用规则3~5把选择和投影的串接合并成单个选择、单个投影或一个选择后面跟一个投影。这是为了使多个选择或投影能同时进行或在一次扫描中全部完成
【步骤5】对内结点分组每一双目运算
和它所有的直接祖先的一元运算结点σ 或Π分为一组如果其后代直到叶子全是单目运算则也将他们并入该组注意当双目运算是笛卡尔积×而且其后的选择不能与它结合为等值连接时则不能将选择与这个× ××并为一组
3很重要的例子
SELECT Student.Sname FROM Student,SC
WHERE Student.SnoSC.Sno AND SC.Sno2;
先对Student和SC做笛卡尔积再对中间结果做选择条件为 Student.SnoSC.Sno再对中间结果做选择条件为SC.Sno2最后投影 查询树 优化1首先选择条件尽可能下移
SC.Sno2只和SC有关所以它会沿着分支恰当的分支下移到SC的上方Student.SnoSC.Sno同时涉及Student和SC所以只能待在那里 优化2把选择和其之前的笛卡尔积合并为等值连接或者干脆变为自然连接 问为什么倒数第二行上面没有投影 应该有的吧 另一个例子
SELECT Student.Sno,Sname FROM Student,SC,Course
WHERE Cnamedatebase AND Ssex女;
将SQL语句转为关系代数表达式 查询树 优化1选择条件复杂先分解选择条件 优化2运算结果去树叶子 优化3涉及投影保留连接属性 优化4一些没必要的投影给他删除