MYSQL数据库课程-查询处理

第十一章 查询处理

1. 查询处理概述

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

2. 查询分解

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

3.查询优化

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

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

image-20210610111245393

image-20210610111306574

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

image-20210610111345753

image-20210610111359430

image-20210610111430791

image-20210610111447344

image-20210610111458458

image-20210610111511475

image-20210610111520935

image-20210610111532783

image-20210610111542694

5.启发式处理策略

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

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中叶的快数
  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值