第十一章 查询处理

1. 查询处理概述

  • 查询处理定义
  • 从数据库中检索数据包含的活动
  • 查询处理的目的是将高级语言(例如SQL)表示的查询转换为正确有效的、用低级语言(实现关系代数)表达的执行策略,并执行该策略以获取所需检索的数据
  • 查询处理主要分为四个阶段
  • 查询分解 --包括语法分析和正确性验证
  • 查询优化
  • 代码生成
  • 执行
  • 查询优化
  • 为查询处理选择一个高效的执行策略
  • 由于与一个高级查询等价的转换形式有多种,所以查询优化的目的就是选择其中资源占用最少的一种。
  • 要尽力减少总的执行时间
  • 减少查询的响应时间
  • Note:在关系个数很多的情况下,找到最优解是非常困难的。通常采取的策略是,寻找一种近似最优解

2. 查询分解

  • 目的:将高级查询转换为关系代数查询,并且分析语法和语义的正确性。
  • 查询分解的阶段:
  1. 分析
  2. 规范化
  3. 语义分析
  4. 化简
  5. 查询重构
  • 分析:
  • 主要工作:
  • 利用程序设计语言编译器的技术对查询进行词法分析和语法分析
  • 负责验证查询中出现的关系和属性是否在系统目录中有定义
  • 检查对数据库对象施加的运算是否与对象的类型相匹配
  • 这一阶段的任务完成后,高级查询转换为更适合处理的内部表示。通常其内部表示形式为某种类型的查询树(关系代数树),构造方法如下:
  • 为查询的每一个基础关系创建一个叶节点
  • 为关系代数运算产生的每一个中间关系创建一个非叶节点
  • 树的根节点代表查询结果
  • 运算按照从叶到根的顺序执行

3.查询优化

  • 两种主要查询优化技术
  • 查询优化的启发式方法
  • 根据相对成本比较不同的策略,并且选择一种最大限度地减少资源使用的策略
  • 在实践中,这两种方法通常结合使用

4.关系代数运算的转换规则

mysql 预处理SQL语句 mysql 数据处理_数据库

mysql 预处理SQL语句 mysql 数据处理_查询优化_02

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UFdj0Edt-1623296495105)(https://gitee.com/liuqi66/markdown-photo/raw/master/others/image-20210610111323578.png)]

mysql 预处理SQL语句 mysql 数据处理_mysql 预处理SQL语句_03

mysql 预处理SQL语句 mysql 数据处理_数据库_04

mysql 预处理SQL语句 mysql 数据处理_关系代数_05

mysql 预处理SQL语句 mysql 数据处理_关系代数_06

mysql 预处理SQL语句 mysql 数据处理_关系代数_07

mysql 预处理SQL语句 mysql 数据处理_mysql 预处理SQL语句_08

mysql 预处理SQL语句 mysql 数据处理_查询优化_09

mysql 预处理SQL语句 mysql 数据处理_数据库_10

mysql 预处理SQL语句 mysql 数据处理_元组_11

5.启发式处理策略

  1. 尽可能早地执行选择运算
  • 注意要将作用于同一关系地选择谓词放在一起
  1. 合并笛卡儿乘积与其后的选择运算为连接运算,用选择运算的谓词表示连接条件
  2. 利用二元运算的结合律对叶结点重新排序,先执行条件最严格的选择运算
  3. 尽可能早地执行投影运算
  4. 只计算一次公共表达式的值

6. 关系代数运算的代价估计

  • DBMS可以有多种不同的方式来实现关系代数运算,查询优化的目的就是从中选择效率最高的那种方案。
  • DBMS采用公式来估算不同方案的开销,然后选择其中开销最小的。
  • 查询处理中占主导地位的开销通常是磁盘访问的开销,因此磁盘访问要比主存访问慢得多,所以在进行代价估算时,仅考虑磁盘访问的开销。
  • 许多代价估算都是基于关系的基数的,所以需要能够估算关系的基数
  • 估算关系代数运算中间结果的大小和开销时,正确与否的关键在于DBMS存储的统计信息的数量和即时性。
  • 我们期望DBMS在系统目录中存储以下类型的信息:
  • 关于基本关系R的统计信息
  • nTuples®:关系R的元组的数目(R的基数)
  • bFactors®:R的块因子(即一块可以存储的R元组的个数)
  • nBlocks®:存储关系R所需的块数
  • nBlocks = nTuples / bFactors
  • 关于基本关系R的属性A
  • nDistinct(A, R): 属性A在关系R中的不同取值的个数
  • min(A,R); max(A,R) : 属性A在关系R中可能的最大值和最小值
  • SC(A,R) : 属性A在关系R中的选择基数。这是满足属性A的某个等值条件的平均元组个数
  • 关于属性集A上的多级索引 I
  • nLevels(A,I) : I 的级数
  • SC(A,R) : 属性A在关系R中的选择基数。这是满足属性A的某个等值条件的平均元组个数
  • 关于属性集A上的多级索引 I
  • nLevels(A,I) : I 的级数
  • nLfBlocks(A,I) : I中叶的快数