数据库第九章——关系查询处理和查询优化

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

查询优化分类 :

  • 代数优化:指关系代数表达式的优化
  • 物理优化:指存取路径和底层操作算法的选择

9.1.1  查询处理步骤

关系数据库管理系统查询处理阶段 :

1. 查询分析

2. 查询检查

3. 查询优化

4. 查询执行  

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

1.选择操作的实现

选择操作典型实现方法:

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

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

l适合小表,不适合大表

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

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

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

2.连接操作的实现

连接操作是查询处理中最耗时的操作之一

1)嵌套循环算法(nested loop join)

2)排序-合并算法(sort-merge join merge join)

3)索引连接(index join)算法

4Hash Join算法

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

9.2.1查询优化概述 

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

(1)集中式数据库

  • 执行开销主要包括

Ø磁盘存取块数(I/O代价)

Ø处理机时间(CPU代价)

Ø查询的内存开销

  • I/O代价是最主要的  

(2)分布式数据库

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

9.2.2一个实例

一个关系查询可以对应不同的执行方案,其效率可能相差非常大。

例如:求选修了2号课程的学生姓名。

第一种Q1:计算广义笛卡尔积,作选择和投影

第二种Q2:计算自然连接,作选择和投影

第三种Q3:先做选择,再做自然连接和投影

※有选择和连接操作时,先做选择操作,这样参加连接的元组就可以大大减少,这是代数优化

※在Q3

  • SC表的选择操作算法有全表扫描或索引扫描,经过初步估算,索引扫描方法较优
  • 对于StudentSC表的连接,利用Student表上的索引,采用索引连接代价也较小,这就是物理优化

9.3 代数优化

查询树的启发式优化

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

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

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

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

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

9.4 物理优化

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

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

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

1.选择操作的启发式规则

Ⅰ 对于小关系,使用全表顺序扫描,即使选择列上有索引

Ⅱ 对于大关系,启发式规则有:

       (1)对于选择条件是“主码=值”的查询

l查询结果最多是一个元组,可以选择主码索引

l一般的关系数据库管理系统会自动建立主码索引

      (2)对于选择条件是“非主属性=值”的查询,并且选择列上有索引或者对于选择条件是属性上的非等值查询或者范围查询,并且选择列上有索引

  • 要估算查询结果的元组数目

l如果比例较小(<10%)可以使用索引扫描方法

l否则还是使用全表顺序扫描

      (3)对于用AND连接的合取选择条件

  • 如果有涉及这些属性的组合索引,优先采用组合索引扫描方法
  • 如果某些属性上有一般的索引,可以用索引扫描方法

l通过分别查找满足每个条件的指针,求指针的交集

l通过索引查找满足部分条件的元组,然后在扫描这些元组时判断是否满足剩余条件

  • 他情况:使用全表顺序扫描

     (4对于用OR连接的析取选择条件,一般使用全表顺序扫描

2.连接操作的启发式规则

  (1)如果2个表都已经按照连接属性排序——选用排序-合并算法

  (2)如果一个表在连接属性上有索引——选用索引连接算法

  (3)如果上面2个规则都不适用,其中一个表较小——选用Hash join算法

  (4)可以选用嵌套循环方法,并选择其中较小的表,确切地讲是占用的块数(b)较少的表,作为外表(外循环的表)

  • 3
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值