查询优化一般可以分为代数优化和物理优化。代数优化是指关系代数表达式的优化,物理优化指的是通过存取路径和底层操作算法的选择进行的优化。

9.1 关系数据库系统的查询处理

9.1.1 查询处理步骤

1. 查询分析

首先对查询语句进行扫描、词法分析和语法分析。从查询语句中识别出语言符号,如SQL关键字、属性名和关系名等,进行语法检查和语法分析,即判断查询语句是否符合SQL语法规则。

2. 查询检查

对合法的查询语句进行语义检查,即根据数据字典中有关的模式定义检查语句的数据库对象,如关系名、属性名是否存在有效。还要根据数据字典中的用户权限和完整性约束定义对用户的存取权限进行检查。

3. 查询优化

代数优化(逻辑优化)和物理优化(基于规则、代价、语义),生成查询计划树

4.查询执行

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

9.1.2 实现查询操作的算法示例

1. 选择操作的实现

  1. 简单的全表扫描算法
  2. 索引扫描算法

2. 连接操作的实现

  1. 嵌套循环算法:最简单最通用,实际上都是基于数据块的循环
  2. 排序-合并算法:常用与等值连接,尤其适合各个表已经排好序的情况。
  • 第一步:如果参与连接的表没有排好序,根据连接属性排序
  • 第二步:sorted_merge
  1. 索引连接算法:根据表上已经建立好的索引,根据索引查找匹配的元组
  2. hash join 算法:等值连接,要求内存足够大,小表的hash表要全部能够放进内存。分成两个阶段
  • 第一步,为小表建立hash表,根据连接属性作为hash码
  • 第二步,对另外一张表的连接属性hash一遍,将匹配的元组连接起来

9.2 关系数据库系统的查询优化

9.2.1 查询优化概述

  1. 在集中式数据库中,查询执行开销主要包括磁盘存取块数(IO代价)、处理机时间(CPU代价)以及查询的内存开销
  2. 计算查询代价时一般用查询处理读写的块数作为衡量单位

9.3 代数优化

9.3.1 关系代数表达式等价变换规则

9.3.2 查询树的启发式优化

  1. 选择运算应尽可能先做
  2. 把投影运算和选择运算同时进行:这两者都是一元操作,一个元组能不能成为结果只取决于其本身
  3. 把投影同其前或后的双目运算结合起来
  4. 把某些选择同在它前面要执行的笛卡儿积结合起来称为一个连接运算
  5. 找出公共子表达式

具体方法:

9.4 物理优化

物理优化可以选择的方法是:

  1. 基于规则的启发式优化
  2. 基于代价估算的优化
  3. 两者结合的优化方法

9.4.1 基于启发式规则的存取路径选择优化

选择操作的启发式规则:
小关系,全表扫描
大关系:

  1. 若选择条件是主码,则可以选择主码索引,因为主码索引一般是被自动建立的
  2. 若选择条件是非主属性的等职查询,并且选择列上有索引,如果选择比例较小(10%)可以使用索引扫描,否则全表扫描
  3. 若选择条件是属性上的非等职查询或者范围查询,同上
  4. 对于用and连接的合取选择条件,若有组合索引,优先用组合索引方法;如果某些属性上有一般索引,则用索引扫描,否则全表扫描
  5. 对于用OR连接的析取选择条件,全表扫描

连接操作的启发式规则

  1. 若两个表都已经按连接属性排序,则选用排序-合并算法
  2. 若一个表在连接属性上有索引,则使用索引连接方法
  3. 若其中一个表较小,则选用hash join
  4. 最后可以使用嵌套循环,小表坐外表

9.4.2 基于代价估算的优化

  • 统计信息:数据字典中存储了优化器需要的优化信息,包括基本表的元组总数、长度、占用块数,每个列的不同值的个数、最大/小值、是否有索引,索引的层数、个数、选择基数等
  1. 代价估算实例

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

  1. 数据库系统概论第二章总结

    数据库系统概论第二章总结 文章目录 数据库系统概论第二章总结 第二章 关系数据库 2.1 关系数据结构及形式化定义 2.1.1 关系 2.2 关系操作 2.2.1 基本的关系操作 2.2.2 关系数据 ...

  2. 数据库系统概论-第一章绪论

    数据库系统概论-第一章绪论 1.1数据库系统概述 1.2数据模型 1.4数据库系统的组成 1.数据库 2.数据库管理系统(及其开发工具) 3.应用系统 4.数据库管理员 5.(用户) 1.4.1 数据 ...

  3. 第九章 SQL查询数据库(一)

    文章目录 第九章 SQL查询数据库 查询类型 使用SELECT语句 SELECT子句的执行顺序 选择字段 JOIN操作 选择大量字段的查询 定义和执行命名查询 创建查询和调用 类查询 第九章 SQL查 ...

  4. 第九章 SQL查询数据库(二)

    文章目录 第九章 SQL查询数据库(二) 调用用户定义函数的查询 查询串行对象属性 查询集合 使用说明和限制 调用文本搜索的查询 伪字段 查询元数据 快速查询 查询和企业缓存协议Enterprise ...

  5. 3.4 《数据库系统概论》之数据查询---SELECT(单表查询、连接查询、嵌套查询、集合查询、多表查询)

    文章目录 0.前言 1.思维导图 2.Student/SC/Course表数据及结构 3.SELECT语句的一般格式 4.单表查询 (1)选择表中的若干列 ① 查询指定列 ② 查询全部列 ③ 查询经过 ...

  6. 笔记:3.4 《数据库系统概论》之数据查询---SELECT(单表查询、连接查询、嵌套查询、集合查询、多表查询)

    对 3.2 数据查询-SELECT(单表查询.连接查询.嵌套查询.集合查询.多表查询)的转载与学习笔记: 0.前言 本篇文章是对<数据库系统概论>王珊老师主编的数据库查询SELECT部分做 ...

  7. 数据库系统概论第一章课后习题答案(第5版)

    本文PDF版下载:点击下载 1.试述数据.数据库.数据库系统.数据库管理系统的概念. (1)数据是描述事物的符号记录. (2)数据库是长期储存在计算机内的.有组织的.可共享的数据集合. (3)数据库系 ...

  8. 数据库系统概论 第二章 关系数据库

    目录 2.1 关系数据结构及形式化定义 2.1.1 关系 2.1.2 关系模式 2.1.3 关系数据库 2.1.4 关系模型的存储结构 2.2 关系操作 2.2.1 基本的关系操作 2.2.2 关系数 ...

  9. 数据库系统概论 第二章关系数据库 知识点总结

    目录 1.  关系数据结构及形式化定义 1.1 关系 1.1.1 笛卡儿积 1.1.2 关系 1.2  关系模式 1.3 关系数据库 2. 关系操作 2.1 基本的关系操作 2.2 关系数据语言的分类 ...

最新文章

  1. mapdb java_JVM崩溃后MapDb恢复
  2. 年薪40万,我用的是这套Python学习体系
  3. Zookeeper C API 指南
  4. 【C语言】控制台窗口图形界面编程(一)句柄和文本属性
  5. 效能优化实践:C/C++单元测试万能插桩工具
  6. 计算机复试比重低的学校,又有985院校发布调剂信息,这个34所降低复试比重!...
  7. tushare查看a股是否跌到位
  8. 深度优先算法解决有向有权图的最短路径问题
  9. 创建控制文件后的疑难解答
  10. Rabbit-音乐欣赏
  11. SpriteBuilder切换解决方案以及CCB的修改与保存
  12. C# Windows Phone App 开发,自制LockScreen 锁定画面类别(Class),从【网路图片】、【Assets资源】、【UI】修改锁定画面。...
  13. Optisystem软件与Matlab软件的联合数据读取
  14. linux的桌面分辨率设置,linux xorg屏幕分辨率设置
  15. Teamviewer QuickSupport - 在电脑上远程连接控制手机/平板的软件神器 (Android/iOS)
  16. HP-Socket通信框架使用入门
  17. 制作半透明的毛玻璃效果教程
  18. COSMOS认证咨询,Cosmo-天然产品标准以及Cosmo有机产品标准分为哪几大类
  19. 解决 Error starting userland proxy: listen tcp 0.0.0.0:6379: bind: address already in use
  20. GDSOI2019退役祭

热门文章

  1. 洛谷 P1003 铺地毯
  2. 【Win 10 应用开发】InkToolBar——涂鸦如此简单
  3. JavaScript之共享onload
  4. CSS知识总结之设计模式(持续学习中)
  5. MSP430程序库五SPI同步串行通信
  6. 官宣!中央广播电视总台《2021年春节联欢晚会》总导演组公布
  7. 和USB设备建立通信的过程
  8. 计算机组成原理知识点概叙
  9. mysql分布式数据库实践论文_新浪微博基于MySQL的分布式数据库实践
  10. java 接口中 常量_讨论:Java 接口当中的 “常量接口”