数据库笔记(第九章)

  • 关系查询处理和查询优化

一:关系数据库系统的查询处理

1.查询处理步骤

关系数据库管理系统查询处理阶段 :  查询分析 查询检查 查询优化 查询执行

  1. 实现查询操作的算法示例

选择操作典型实现方法:

(1) 全表扫描方法 (Table Scan)

对查询的基本表顺序扫描,逐一检查每个元组是否满足选择条件,把满足条件的元组作为结果输出

适合小表,不适合大表

(2)索引扫描方法 (Index Scan)

适合于选择条件中的属性上有索引(例如B+树索引或Hash索引)

通过索引先找到满足条件的元组主码或元组指针,再通过元组指针直接在查询的基本表中找到元组

全表扫描算法

假设可以使用的内存为M块,全表扫描算法思想:

(1)按照物理次序读Student的M块到内存

(2)检查内存的每个元组t,如果满足选择条件,则输出t

(3)如果student还有其他块未被处理,重复(1)和(2)

二:关系数据库系统的查询优化

查询优化在关系数据库系统中有着非常重要的地位

关系查询优化是影响关系数据库管理系统性能的关键因素

由于关系表达式的语义级别很高,使关系系统可以从关系表达式中分析查询语义,提供了执行查询优化的可能性  

  1. 查询优化概述

关系系统的查询优化

是关系数据库管理系统实现的关键技术又是关系系统的优点所在,减轻了用户选择存取路径的负担

关系数据库管理系统通过某种代价模型计算出各种查询执行策略的执行代价,然后选取代价最小的执行方案 集中式数据库 执行开销主要包括磁盘存取块数(I/O代价) 处理机时间(CPU代价) 查询的内存开销  I/O代价是最主要的  分布式数据库

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

  1. 查询优化的总目标:选择有效的策略 求得给定关系表达式的值 使得查询代价最小(实际上是较小)

三:代数优化

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

代数优化策略:通过对关系代数表达式的等价变换来提高查询效率

关系代数表达式的等价:指用相同的关系代替两个表达式中相应的关系所得到的结果是相同的

两个关系表达式E1和E2是等价的,可记为E1≡E2

2.常用的等价变换规则:

(1)连接、笛卡尔积交换律

       设E1和E2是关系代数表达式,F是连接运算的条件,则有

        E1  × E2≡E2  × E1

   E1      E2≡E2      E1

         E1      E2≡E2      E1
(2)连接、笛卡尔积的结合律

      设E1,E2,E3是关系代数表达式,F1和F2是连接运算的条件

        (E1  × E2) × E3≡E1 × (E2 × E3)

        (E1      E2)      E3≡E1     (E2     E3)

        (E1      E2)      E3≡E1     (E2     E3)

(3)投影的串接定律

(4)选择的串接定律

(5)选择与投影操作的交换律

(6)选择与笛卡尔积的交换律

如果F中涉及的属性都是E1中的属性,则

          σF(E1×E2)≡σF(E1)×E2

如果F=F1∧F2,并且F1只涉及E1中的属性,F2只涉及E2中的属性,则由上面的等价变换规则1,4,6可推出:

          σF(E1×E2)≡    (E1)×    (E2)

若F1只涉及E1中的属性,F2涉及E1和E2两者的属性,则仍有

          σF(E1×E2)≡       (      (E1)×E2)

      它使部分选择在笛卡尔积前先做

  1. 选择与并的分配律

(8) 选择与差运算的分配律

(9) 选择对自然连接的分配律

(10)投影与笛卡尔积的分配律

(11)投影与并的分配律

3:查询树的启发式优化

典型的启发式规则

(1)选择运算应尽可能先做在优化策略中这是最重要、最基本的一条。

(2)把投影运算和选择运算同时进行如有若干投影和选择运算,并且它们都对同一个关系操作,则可以在扫描此关系的同时完成所有的这些运算以避免重复扫描关系。

(3) 把投影同其前或其后的双目运算结合起来,没有必要为了去掉某些字段而扫描一遍关系。

(4) 把某些选择同在它前面要执行的笛卡尔积结合起来成为一个连接运算,连接特别是等值连接运算要比同样关系上的笛卡尔积省很多时间。

(5) 找出公共子表达式

如果这种重复出现的子表达式的结果不是很大的关系

并且从外存中读入这个关系比计算该子表达式的时间少得多

则先计算一次公共子表达式并把结果写入中间文件是合算的。

当查询的是视图时,定义视图的表达式就是公共子表达式的情况

四:物理优化

代数优化改变查询语句中操作的次序和组合,不涉及底层的存取路径

对于一个查询语句有许多存取方案,它们的执行效率不同, 仅仅进行代数优化是不够的

物理优化就是要选择高效合理的操作算法或存取路径,求得优化的查询计划

1.两者结合的优化方法:

常常先使用启发式规则,选取若干较优的候选方案,减少代价估算的工作量

然后分别计算这些候选方案的执行代价,较快地选出最终的优化方案  

物理优化方法

基于规则的启发式优化

启发式规则是指那些在大多数情况下都适用,但不是在每种情况下都是适用的规则。

基于代价估算的优化

优化器估算不同执行策略的代价,并选出具有最小代价的执行计划。

  

猜你喜欢

转载自blog.csdn.net/sdau20171761/article/details/84934461