目录

  • 关系查询处理和查询优化
    • 查询处理
      • 基本步骤(概念题)
      • 查询操作的示例
    • 查询优化(计算I/O次数题)
    • 代数优化(基于语法树的优化题)
    • 物理优化

关系查询处理和查询优化

本章主要涉及数据库的查询处理步骤和查询优化技术。查询优化可分为代数优化和物理优化。代数优化是对关系代数表达式的优化,物理优化是对存取路今后和底层算法的选择的优化。

查询处理

基本步骤(概念题)

关系数据库的查询处理分为查询分析、查询检查、查询优化、查询执行四个步骤。

  1. 查询分析:对语句进行扫描、词法分析,识别出关键字等,然后进行语法分析,检查其是否符合SQL语法规则。
  2. 查询检查:对查询语句进行语义检查,检查数据库、关系名、属性名等是否存在且有效;与此同时,进行视图消解,转化为对基本表的操作;根据用户权限和完整性约束对查询进行检查。检查通过后,将SQL转化为等价的关系代数表达式
  3. 查询优化:代数优化和物理优化。通过对关系代数的等价变换使查询变得高效,根据基于规则的、基于代价的、基于语义的方法进行存取路径和底层操作的算法的选择。
  4. 查询执行

查询操作的示例

选择操作:SELECT … FROM … WHERE <条件表达式>
—>全表扫描、索引扫描
连接操作:SELECT … FROM A, B WHERE …
—>嵌套循环排序-合并算法、索引连接、hash join算法(概念题)

查询优化(计算I/O次数题)

在使用SQL的时候,用户不必考虑如何最好的表达查询以获得较高的效率,系统可以比用户手动的优化做的更好。原因是:

  • 优化器可以从数据字典中获得很多统计信息,做出正确的估算。
  • 当物理数据改变时,系统可以自动的对查询进行重新优化。
  • 优化器可以考虑上百种优化方法。
  • 优化器中采用了很多复杂的技术。

查询的总代价 = I/O代价 + CPU代价 + 内存代价 + 通信代价

有选择和连接操作的时候,应该先做选择操作(索引或全表扫描)。

代数优化(基于语法树的优化题)

对关系代数进行等价变换,提高查询效率。

等价变换规则:

  • 连接运算、笛卡尔积运算的交换率(因为关系属性列的无序的!)

  • 连接、笛卡尔积的结合律(注意!!关系的前后顺序不能改变!!)

    结合的先后不同,其代价也是不同的。

  • 投影的串接定律

  • 选择的串接定律

  • 选择与投影的交换律

  • 选择与笛卡尔积的交换律

  • 选择与的分配律,选择与的分配律,选择对自然连接的分配律:我们要努力先进行选择操作再进行其他运算!!!

  • 投影与笛卡尔积的分配律

  • 投影与并的分配律

查询树的启发式优化:减少中间关系的元组数,元组大小

  • 选择运算尽可能先做
  • 投影和选择同时进行(及在一次扫描的过程中同时完成这两种操作)
  • 把投影前后的双目运算结合起来,避免重复扫描
  • 把先笛卡尔积在进行选择的命令合起来成为连接运算,避免重复扫描或减小中间结果集的规模
  • 找出公共子表达式,避免重复计算(例:用户频繁进行基于视图查询操作,而计算视图所需的时间远比从中间文件中取出视图所需是时间长,所以我们先将视图计算出存储在中间文件,用户对视图进行查询时我们直接从中间文件中取出视图)

简化的具体做法:利用上述的规则,尽可能的把选择操作移到树的叶端(向下移动)

物理优化

代数优化不涉及底层的存取路径。物理优化是要选择高效的操作算法与存取路径。

  • 基于规则的启发式优化:启发式规则是一种经验,在大多数情况下都适用,但也存在不适用的情况。
  • 基于代价估算的优化:优化器估算不同实行策略的代价并选出具有最小代价的
  • 两者结合的优化:先根据启发式规则选择较优的候选方案,减少代价估算的工作量,然后再根据代价估算优化方法较快的选择最优的方案。

选择操作的启发式规则:

  • 小关系:全表扫描(不管有没有索引)
  • 大关系:
    • 选择条件是主码=值:使用主码检索(因为查询结果最多只会有一个元组,且DBMS一般都会自动建立主码索引)
    • 非主属性=值选择列上有索引:若估算的元组数占比较小可使用索引扫描,否则还是全表扫描。
    • 非等值查询或范围查询且选择列上有索引:若估算的元组数占比较小可使用索引扫描,否则还是全表扫描。
    • AND连接的合取选择:优先使用组合索引(如果有的话);在某些条件上有索引,先进行索引扫描找到满足部分条件的元组,然后在这个基础上扫描满足剩下的条件的元组;其他情况:全表扫描
    • OR连接的析取选择条件:一般全表扫描

连接操作的启发式规则:

  • 两个表都按照连接属性排序:排序-合并算法
  • 在连接属性上有索引:索引连接算法
  • 其他情况:若一个表较小:hash join 算法
  • 嵌套循环算法,较小的表作为外循环的表

基于代价的优化中,优化器要统计很多的信息:


数据库系统概论第五版_第九章:关系查询处理和查询优化相关推荐

  1. java程序设计基础_陈国君版第五版_第九章例题

    java程序设计基础_陈国君版第五版_第九章例题 /*** 本测例会产生一个数组越界异常* @author Richard**/ public class Main9_1 {public static ...

  2. 第九章——关系查询处理和查询优化

    本章介绍关系数据库的查询处理(query processing)和查询优化(query optimization)技术 查询优化一般可分为代数优化(也称为逻辑优化)和物理优化(也称为非代数优化). 代 ...

  3. 数据库系统概论第五版_第四章:数据库安全性

    目录 数据库安全 概述 不安全因素 安全标准简介 安全性控制 用户身份认证方法 访问控制(重点) 视图机制 审计Audit 数据加密 数据库安全 数据库往往有非常多的用户进行访问,其数据需要被共享,但 ...

  4. 数据库系统概论(第五版) 王珊 第二章课后习题答案

    1 .试述关系模型的三个组成部分. 答:关系模型由关系数据结构.关系操作集合和关系完整性约束三部分组成. 2 .试述关系数据语言的特点和分类. 答:关系数据语言可以分为三类: 关系代数语言. 关系演算 ...

  5. 数据库系统概论(第五版 王珊 萨师煊 编著)

    数据库系统概论知识点总结 学习目录 基础篇 第一章 绪论 1.1 数据库系统概述 1.2 数据模型 1.3 数据库系统的结构 1.4 数据库系统的组成 1.5 小结 第二章 关系数据库 第三章 关系数 ...

  6. 数据库系统概论第五版第二章习题6

    (SPJ数据库查询操作) 数据库系统概论第五版第二章习题6(SPJ数据库查询操作)_FunPony的博客-CSDN博客

  7. 《数据库系统概论(第五版)》学习资料

    <数据库系统概论(第五版)>学习资料 一.第一章 1.数据:描述事物的符号记录 2.数据库:长期储存在计算机内.有组织.可共享的大量数据集合. (数据库中的数据按一定的数据模型组织.描述和 ...

  8. 数据库系统概论第五版知识大纲

    数据库系统概论第五版知识大纲 第1章 绪论 1.1 数据库系统概述 基本概念 数据:描述事物的符号记录 数据库:数据库是长期储存在计算机内.有组织的.可共享的大量数据的集合 数据库系统:数据库系统是由 ...

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

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

  10. 数据库系统概论第五版课后习题

    数据库系统概论第五版课后习题

最新文章

  1. 2 用python进行OpenCV实战之图像基本知识
  2. 锁死AI基础研究的两个「智子」是什么?
  3. oracle11管理员连接数据库,1.运行 cmd.exe;2.输入 sqlplus / as sysdba,以系统管理员(sysdba)身份连接数据库,进行数据库管理操作。3.连接成功后执...
  4. Sun公司发布最新版本的JDK 6 update 11
  5. Java 数组中new Object[5]语句是否创建了5个对象?
  6. React 入门与实战-课时7 虚拟DOM的本质和目的
  7. opj1837 Balance(dp)
  8. AC日记——阶乘之和 洛谷 P1009(高精度)
  9. mysql xtrabackup-v2_MySQL物理备份基础知识(基于xtrabackup2.4版本)
  10. 数据分析实战—Video Game Sales电子游戏销售分析
  11. ARP网关欺骗程序的实现(vs2008 winpacp)
  12. 火焰检测方法和数据集记录
  13. 计算机专业本科一批,本科一批招生计划
  14. 牛腩--SQLHelper
  15. python输入年份判断生肖_python根据出生年份简单计算生肖的方法
  16. Python爬虫爬取中国大学慕课MOOC课程的课程评价信息(讨论信息),采用selenium动态爬取方法
  17. 如何设置用计算机程序打开方式,WPS安装后怎么设置为文档的默认打开方式的方法...
  18. DWI_preprocessing DTI_reduce commands
  19. 计算机一级设置项目符号,重推计算机等级考试题库:一级MS Office第三章“项目符号和段落编号”...
  20. No command 'setenv' found

热门文章

  1. 备战2019秋招之程序员代码面试指南(左程云)C++
  2. 算法与数据结构(基于C语言)中线性表的快速排序快速查找
  3. Photoshop7.0安装步骤
  4. optisystem自建matlab信号源仿真
  5. 寻剑气世界java,Java——Unsafe
  6. ZTree的API文档分享
  7. 《FLUENT 14.0超级学习手册》—— 导读
  8. Transact-SQL语言
  9. b站视频解析php,B站视频解析套路
  10. EXPRESS语言与IFC体系