文章目录

  • 一:查询处理步骤
    • (1)查询分析
    • (2)查询检查
    • (3)查询优化
    • (4)查询执行
  • 二:实现查询操作的算法示例
    • (1)选择操作的实现
      • ①:全表扫描
      • ②:索引(或散列)扫描
    • (2)连接操作的实现
      • ①:嵌套循环方法(nested loop)
      • ②:排序-合并方法(sort-merge join)
      • ③:索引连接(index join)
      • ④:哈希连接(hash join)

查询处理是关系数据库管理系统执行查询语句的过程,其任务是把用户提交给关系数据库管理系统的查询语句转换为高效的查询执行计划

一:查询处理步骤

关系数据库管理系统查询处理可以分为4个阶段:

  • 查询分析
  • 查询检查
  • 查询优化
  • 查询执行

(1)查询分析

任务:对查询语句进行扫描,分析词法、语法是否符合SQL语法规则

  • 如果没有语法错误转入下一步
  • 如果有语法错误则在报告中显示错误

(2)查询检查

任务:

  • 对合法的查询语句进行语义检查,即根据数据字典中有关的模式定义检查语句中的数据库对象,如关系名、属性名是否存在和有效
  • 如果是对视图的操作,则要用视图消解方法把对视图的操作转换成对基本表的操作
  • 还要对权限完整性约束进行检查,如果违反则拒绝查询
  • 检查通过后,把SQL查询语句转化为内部表示,也即等价的关系代数表达式
  • 在此过程中,要把数据库对象的外部名称换为内部表示
  • RDBMS一般用查询树(又称为语法分析树)来表示扩展的关系代数表达式

(3)查询优化

任务:每个查询都会有许多可供选择的执行策略和操作算法,查询优化就是选择一个高效执行的查询处理策略。按照优化的层次一般可以将查询优化分为

  • 代数优化:是指关系代数表达式的优化,也即按照一定规则,通过对关系代数表达式进行等价变换,改变代数表达式中操作的次序和组合,使查询更高效
  • 物理优化:是指存取路径底层操作算法的选择。选择依据可以是基于规则的(rule based)基于代价的(cost based)、基于语义的(semantic based)

(4)查询执行

依据优化器得到的执行策略生成查询执行计划,由 代码生成器(code generator) 生成执行这个查询计划的代码,然后加以执行,回送查询结果。

二:实现查询操作的算法示例

(1)选择操作的实现

以简单的单表选择为例,如下

SELECT* FROM STUDENT WHERE<条件表达式>

<条件表达式>可以有以下几种情况

  • case1case1case1:无条件
  • case2case2case2:Sno=‘201215121’
  • case3case3case3:Sage > 20
  • case4case4case4:Sdept=‘CS’ AND Sage > 20

选择操作只涉及一个关系,典型的实现方法有

①:全表扫描

思想:假设可以使用的内存块为MMM块

  • 按照物理次序读Student的MMM块到内存
  • 检查内存的每个元组ttt,如果ttt满足选择条件,则输出ttt
  • 如果Student还有其他块未被处理,重复即可

优缺点:

  • 优点:只需要用很少的内存(最少为1块)就可以运行,且控制简单。适用于规模较小的表
  • 缺点:对于规模大的表进行顺序扫描,当选择率低时会使效率很低

②:索引(或散列)扫描

思想:如果选择条件中的属性上有索引(例如BBB+树索引或hashhashhash索引),可以用索引扫描。通过索引先找到满足条件的元组指针,再通过元组指针在查询的基本表中找到元组。 一般来说,当选择率低于10%时建立索引才有意义

  • 以casecasecase 2为例:Sno=‘201215121’,并且Sno上有索引,则可以使用索引得到Sno为’201215121’元组的指针,然后通过元组指针在Student表中检索到该学生
  • 以casecasecase 3为例:Sage>20, 并且Sage上有B+树索引,则可以使用B+树索引找到Sage=20的索引项,以此为入口点在B+树的顺序集上得到Sage>20的所有元组指针,然后通过这些元组指针到Student表中检索到所有年龄大于20的学生
  • 以casecasecase 4为例: Sdept=‘CS’ AND Sage>20, 如果SdeptSage 上都有索引,一种算法是,分别用上面两种方法找到Sdept='CS’的一组元组指针和Sage>20的另一组元组指针,求这两组指针的交集,再到Student表中检索,就得到计算机系年龄大于20岁的学生;另一种算法是,找到Sdept='CS’的一组元组指针,通过这些元组指针到Student表中检索,并对得到的元组检查另一些选择条件(如Sage>20) 是否满足,把满足条件的元组作为结果输出

(2)连接操作的实现

连接操作是查询处理中最常用也是最耗时的操作之一 。不失一般性,这里通过例子简单介绍 等值连接(或自然连接) 最常用的几种算法思想

SELECT * FROM Student,SC WHERE Student.Sno=SC.Sno;

①:嵌套循环方法(nested loop)

思想:对外层循环(Student表)的每一个元组,检索内层循环(SC表)中的每一个元组,并检查这两个元组在连接属性(Sno) 上是否相等。如果满足连接条件,则串接后作为结果输出,直到外层循环表中的元组处理完为止

②:排序-合并方法(sort-merge join)

思想:

  1. 如果参与连接的表没有排好序,首先对Student表和SC表按连接属性Sno排序
  2. 取Student表中第一个 Sno,依次扫描SC表中具有相同Sno的元组,把它们连接起来
  3. 当扫描到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 表并与之相匹配的元组连接起来。

(数据库系统概论|王珊)第九章关系查询处理和关系优化-第一节:查询处理相关推荐

  1. 数据库系统概论:第九章 关系查询和关系优化

    查询优化一般可以分为代数优化和物理优化.代数优化是指关系代数表达式的优化,物理优化指的是通过存取路径和底层操作算法的选择进行的优化. 9.1 关系数据库系统的查询处理 9.1.1 查询处理步骤 1. ...

  2. (数据库系统概论|王珊)第十章数据库恢复技术-第一、二节:事务的基本概念和数据库恢复概述

    文章目录 一:事务的基本概念 (1)事务 A:定义 B:事务的定义 (2)事务的四个特性--ACID A:数据库的ACID ①:原子性(Atomicity) ②:一致性(Consistency) ③: ...

  3. (数据库系统概论|王珊)第九章关系查询处理和关系优化-第三节:查询优化之代数优化

    注意: 关系代数有关符号,大家可能又不熟悉了,点击跳转:(数据库系统概论|王珊)第二章关系数据库-第四节:关系代数 文章目录 一:关系代数表达式等价变换规则 (1)连接.笛卡尔积.并.交的交换律 (2 ...

  4. (数据库系统概论|王珊)第二章关系数据库-第一节:关系数据结构及其形式化定义

    文章目录 一:关系 (1)域 (2)笛卡尔积 (3)关系 A:基本概述 B:码相关概念 C:关系的三种类型 二:关系模式 三:关系数据库 (1)基本概念 (2)关系数据库的型与值 前面说过,数据模型由 ...

  5. (数据库系统概论|王珊)第六章关系数据理论-第一节:为什么要研究关系数据理论

    文章目录 一:概念回顾:关系模式 二:数据依赖 三:一个例子:不遵循关系数据理论导致的问题 一句话,研究关系数据库理论就是为了设计出合适的关系模式,也即合适.高效的表 一:概念回顾:关系模式 相关文章 ...

  6. (数据库系统概论|王珊)第三章关系数据库标准语言SQL-第四节:数据查询

    文章目录 ★★★★★SELECT语句格式★★★★★ 一:单表查询(查询时只涉及一张表) (1)选择表中的若干列 A:查询指定列 B:查询全部列 C:查询经过计算的值 ①:算数表达式 ②:字符串常量及函 ...

  7. (数据库系统概论|王珊)第三章关系数据库标准语言SQL:习题

    文章目录 名词解释 简答题 应用题 名词解释 视图:视图是一个虚表,其本质就是一条SELECT语句,而查询结果被赋予了一个名字,也即视图名字.或者说视图本身不包含任何数据,它只包含映射到基表的一个查询 ...

  8. (数据库系统概论|王珊)第三章关系数据库标准语言SQL-第二、三节:数据定义

    文章目录 零:有关说明 (1)安装数据库与建表 (2)一些语法说明 一:模式的定义和删除(SCHEMA) (1)定义模式 (2)删除模式 二:基本表的定义.删除和修改(TABLE) (1)定义基本表 ...

  9. (数据库系统概论|王珊)第七章数据库设计-第一节:数据库设计概述

    注意:此部分内容和软件工程的知识点重合较多,更多请点击[免费分享]软件工程核心知识点 本章较分散,各节导航如下 (数据库系统概论|王珊)第七章数据库设计-第二节:需求分析 (数据库系统概论|王珊)第七 ...

  10. (数据库系统概论|王珊)第四章数据库安全性-第一节:数据库安全性概述

    文章目录 一:数据库的不安全因素 二:安全标准简介 (1)信息安全标准的发展简史 (2)TCSEC/TDI A:基本内容 B:安全级别划分 在(数据库系统概论|王珊)第一章绪论-第一节:数据库系统概论 ...

最新文章

  1. 九、非主体机构元素——header元素、footer元素、address元素、网页编排
  2. 《The Elements of Statistical Learning》 chp3 Linear Models for Regression
  3. C++编译 C # 调用方法
  4. xml文件格式例如以下
  5. 活动平台为何没有x86?_一个由跨平台产生的浮点数bug | 有你意想不到的结果
  6. dp线和hdmi区别_HDMI铜线与光纤线有啥区别?为什么铜线传播速度更快?看完涨知识...
  7. 行为设计模式 - 观察者设计模式
  8. 手持gps坐标转换参数求解方法及在excel中的实现_地质填图手持GPS的校正方法
  9. Windows2008r2如何关闭防火墙
  10. 【C/C++】成员变量的初始化顺序
  11. 54 字符流中第一个不重复的字符
  12. ie6-7中会出现图片下有空隙
  13. 中达优控触摸屏编程视频教程_中达优控触摸屏编程软件下载
  14. MT4跟单软件多帐户跨平台如何解决喊单账号与跟单账号个别品种合约数量不一致的问题?——Hookswork
  15. 如何解决MySQL闪退
  16. 今天开始写博客记录程序媛成长过程
  17. java木马编码,深度好文:解码“深度伪装”的ZeuS网银木马
  18. 无广告托管应用,免费的应用分发平台,提供下载次数等数据统计,Android、ios应用合并,一个二维码搞定
  19. 配置接口IP地址并通过静态路由、默认路由配置实现全网互通!
  20. altera CPLD通过nios在线升级

热门文章

  1. 我想说:工作没那么难找吧
  2. linux系统编程 传智播客,传智播客王保明Linux培训系列教程全120集
  3. 新的吉尼斯世界纪录 – 最快人类基因组测序,用时5 小时 2 分钟!
  4. 给刚博士毕业的年轻学者9点建议,最后一条:抓紧结婚,生娃!
  5. PS图片无损放大插件 Alien Skin Blow Up 3 for Mac
  6. java 比较源文件_Beyond Compare比较Java源代码文件的操作流程
  7. pandas plot label_Python+Pandas | 分析比特币与股票市场的关系
  8. Linux学习之打印进程树
  9. ThinkPHP6项目基操(8.多应用模式)
  10. Linux笔记-iptables规则原理和组成