数据库——查询处理优化

版权声明:原创作品转载需标明作者与地址 https://blog.csdn.net/zjuwxx/article/details/90374277

目录

一、查询处理

步骤

二、查询优化

2.1概述

2.2关系代数等价变换规则

2.2.1常用等价变换规则

2.2.2关系代数表达式的优化规则

2.2.3关系代数表达式的优化算法


一、查询处理

步骤

查询分析  对查询语句进行扫描、词法分析和语法分析

扫描二维码关注公众号,回复: 6394381 查看本文章

查询检查

  • 对合法的查询语句进行语义检查,即根据数据字典中有关的模式定义检查语句中的数据库对象,如关系名、属性名是否有效;如果是对视图的操作,则要用视图消解方法把对视图的操作转换成对基本表的操作
  • 根据数据字典中的用户权限和完整性约束定义对用户的存取权限进行检查
  • 检查通过后把SQL查询语句转换成内部表示,即等价的关系代数表达式

查询优化  选择一个高效执行的查询处理策略

  • 按照优化的层次,可以分为:代数优化、物理优化
  • 查询优化的选择依据:基于规则、基于代价和基于语义

查询执行  依据优化器得到的执行策略,由代码生成器生成执行这个查询计划的代码

  • 两种执行方法:自顶向下和自底向上

二、查询优化

2.1概述

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

关系系统的查询优化由系统完成, 而不是由用户完成

关系数据库管理系统通过某种代价模型计算出各种查询执行策略的执行代价,然后选取代价最小的执行方案

查询优化的总目标:寻求最优的执行计划使查询执行开销尽量

2.2关系代数等价变换规则

代数优化是基于关系代数等价变换规则的优化方法

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

设E、E1、E2是关系代数表达式,若用相同的关系代替E1、E2中相应的关系变量后所得的结果关系相同,则称E1、E2等价,记作 E1≡E2

2.2.1常用等价变换规则

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

E1E2是关系代数表达式,F是连接运算的条件,则

  • E1  \times  E2 ≡ E2  \times  E1
  • E1  \Join  E2 ≡ E2  \Join  E1
  • E1  \Join  E2 ≡ E2  \Join  E1(\Join基于运算条件F

2、连接、笛卡尔积的结合律

E1E2E3是关系代数表达式,F1F2是连接运算的条件,

  • (E1  \times  E2)  \times  E3 ≡ E1  \times  (E2 × E3)
  • (E1  \Join  E2)  \Join  E3 ≡ E1  \Join  (E2  \Join  E3)
  • (E1  \Join  E2)  \Join  E3 ≡ E1  \Join  (E2  \Join  E3)(前一个\Join基于运算条件F1,后一个\Join基于运算条件F2

3、投影的串接定律(幂等律)

设E是关系代数表达式,Ai(i=1,2,…,n),Bj(j=1,2,…,m)是属性名,{ A1A2A}构成{ B1B2B}的子集

对一个表做多次投影,以最终的投影条件为准

4、选择的串接定律(幂等律)

设E是关系代数表达式,Ai(i=1,2,…,n),Bj(j=1,2,…,m)是属性名,{ A1,A2,…,An }构成{ B1,B2,…,Bm }的子集

对一个表做多次选择,最后的选择结果是前面所做的各种选择的条件的交集

5、选择与投影的交换律

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

设F=F1∧F2∧F3,其中F1只涉及E1中的属性,F2只涉及E2中的属性,F3涉及E1和E2两者中的属性

如果某个 Fi不存在,则去掉相应的 \sigmaFi

7、选择对自然连接的分配律

设F=F1∧F2,其中F1只涉及E1的属性,F2只涉及E2的属性

8、选择对并、交、差的分配律

9、投影与笛卡尔积的交换律

设E1和E2是两个关系表达式,A1,…,An是E1的属性,B1,…,Bm是E2的属性

10、投影对笛卡尔积的分配律

设A1,A2,…,An是E1的属性, B1,B2,…,Bm是E2的属性

11、投影对并、交、差的分配律

2.2.2关系代数表达式的优化规则

选择、投影运算应尽可能先做

在优化策略中这是最重要、最基本的一条。因为这样参加连接的元组就可以大大减少,从而减少下一步运算的数据量

把选择和投影运算同时进行

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

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

每形成一个连接后的元组,就立即取出投影字段。而不是先连接形成一个临时关系,然后在再此临时关系上投影

每取出Student的一个元组,先取出投影字段,然后与SC进行连接

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

找出公共子表达式

如果这种重复出现的子表达式的结果不是很大的关系并且从外存中读入这个关系比计算该子表达式的时间少得多,则先计算一次公共子表达式并把结果写入中间文件是合算的

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

2.2.3关系代数表达式的优化算法

构造查询树(语法树)

第一步:把用高级语言定义的查询转换为关系代数表达式

  • 以SELECT子句对应投影操作,以FROM字句对应笛卡尔积,以WHERE子句对应选择操作,生成原始查询树
  • SQL语句转化为原始查询树

第二步:把关系代数表达式转换为查询树

n查询树是一种表示关系代数表达式的树形结构。在一个查询树中,叶子结点表示关系,内结点表示关系代数操作。查询树以自底向上的方式执行:当一个内结点的操作分量可用时,这个内结点所表示的操作启动执行,执行结束后用结果关系代替这个内结点

例:

遵循这些启发式规则,应用等价变换公式来优化关系表达式的算法

  • 输入:一个关系表达式的查询树
  • 输出:优化的查询树

(1)分解选择

利用选择的串接定律,把形如 σF1∧F2∧…∧Fn(E)的式子变换为σF1(σF2(…(σFn(E))…))

(2)选择下移

对每一个选择,利用“选择的串接定律、选择和投影的交换律、选择对笛卡尔积的分配律、选择对并的分配律、选择对差的分配律”尽可能把它移到树的叶端

(3)投影下移

对每一个投影,利用“投影的串接定律、选择和投影的交换律、投影对笛卡尔积的分配律、投影对并的分配律”尽可能把它移到树的叶端

(4)选择、投影合并

利用“投影的串接定律、选择的串接定律、选择和投影的交换律”把选择和投影合并成单个选择、单个投影、或选择后跟投影等三种情况,使多个选择和 / 或投影能同时执行、或在一次扫描中完成

(5)按点分组(每组只有一个双目运算)

把上面得到的语法树分组: 每个双目运算( ×,\Join,∪,- )和它所有的直接祖先为一组(这些直接祖先是(σ,π运算)。若它的后代直到叶子全是单目运算,则也将它们并入该组。但当双目运算是笛卡尔积(×),而且后面不是与它组成等值连接的选择时,则不能把选择与这个双目运算组成同一组

(6)生成程序

 按照每组的求值应在其后代组求值之后进行的顺序为每组生成一个程序,以产生整个表达式的求值程序

例:

by   云烟成雨yycy

猜你喜欢

转载自blog.csdn.net/zjuwxx/article/details/90374277