【梳理】数据库系统概论 第9章 关系查询处理和查询优化 9.1 关系数据库系统的查询处理 9.2 关系数据库系统的查询优化 9.3 代数优化 9.4 物理优化

本文详细介绍了数据库查询处理的四个阶段,包括查询分析、查询检查、查询优化和查询执行,并重点讲解了选择和连接操作的实现算法,如全表扫描、索引扫描、嵌套循环、排序-合并和哈希连接。此外,还讨论了查询优化的重要性,如用户不必关心执行细节、系统可以自动优化、考虑多种复杂优化技术等。最后,提到了代数优化的等价变换规则和物理优化的启发式策略,旨在提高查询效率。
摘要由CSDN通过智能技术生成

教材:王珊 萨师煊 编著 数据库系统概论(第5版) 高等教育出版社
注:文档高清截图在后

第9章 关系查询处理和查询优化

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

1、RDBMS的查询处理分为四个阶段:
【1】查询分析。
对查询语句进行扫描、词法分析和语法分析,识别SQL关键字、属性名和关系名等语言符号,进行语法检查和分析,即判定查询语句是否合乎语法。若无语法错误,则转入下一步;否则,拒绝执行并报错。
【2】查询检查。
对合法语句进行语义检查,即根据数据字典中有关的模式定义检查语句中的数据库对象,如关系名、属性名是否存在且有效。如果是对视图的操作,则用视图消解方法把对视图的操作转换成对基本表的操作。还要根据数据字典中的用户权限和完整性约束定义对存取权限进行检查。如果用户无相应访问权限或违反完整性约束,就拒绝执行该查询。当然,这时的完整性检查是初步、静态的。检查通过后,SQL查询语句会被转换成等价的关系代数表达式,数据库对象的外部名称也被转换为内部表示。RDBMS一般都用查询树(query tree),也称语法树(syntax tree)来表示扩展的关系代数表达式。
【3】查询优化。
查询优化器通过综合运用各种优化技术,获得最好的查询速度提升效果。
【4】查询执行。
根据优化器得到的执行策略生成查询执行计划,由代码生成器(code generator)生成代码并执行,返回查询结果。

2、选择(select)操作的实现算法主要有:
【1】全表扫描(table scan)。
算法的步骤是:
(1)将一定数量的表的内容读入内存。
(2)检查内存的每个元组,输出满足条件的元组。
(3)如果未读取完毕,重复(1)(2)。
全表扫描算法只需要很少的内存(至少一个块。操作系统为了实现更先进的内存管理,一般都会将内存分成若干个块。物理内存被划分为一小块一小块,每块被称为帧(Frame)。分配内存时,帧是分配时的最小单位,最少也要给一帧。在逻辑内存中,与帧对应的概念就是页(Page)。)对规模小的表,这种算法既简单又有效。但表的元组数量较大且满足条件的元组数量占比较少时,顺序扫描的效率就很低。
【2】索引扫描(index scan)。
如果要求的条件中的属性上建立了索引(如B+树或Hash),可以用索引扫描方法,通过索引先找到满足条件的元组的指针,再通过指针访问基本表中的元组。
一般地,选择率较低时,基于索引的选择算法远远优于全表扫描算法。但在某些极端情形下,例如选择率很高,和/或要查找的元素十分均匀地分布,此时基于索引的选择算法的性能就不一定优于全表扫描。因为除了对表本身的扫描以外,对索引结构的操作和维护是需要额外的时间的。而且,根据索引而进行的访问,在内存空间中一般表现为无序。这种跳跃式的随机内存访问花费的时间显然要比顺序访问多出很多倍。

3、连接(join)操作是查询处理中最常用且最耗时的操作之一。这里简单介绍等值连接(自然连接)常用的几种思想。
【1】嵌套循环(nested loop)。
这是最简单可行的算法。类似于编程语言中的for循环,对若干个表通过这种暴力算法进行连接时,每一层循环查询一个元组时,都要重新检验其内层循环的全部元组是否能够与本层循环正在检验的元组构成符合连接的条件。
【2】排序-合并(归并排序,merge-sort)。
这也是等值连接的常用算法,尤其适合参与连接的各表已经有序的情况。
算法的步骤是:
(1)对参与连接的每一个表,如果未排序,都要将表进行排序。快排可以在O(n log n)的时间复杂度内完成排序。
(2)开始顺序扫描各个表,完成连接。所有参与连接的表都只需要扫描一次。表越大,通过归并排序执行的连接对执行时间的缩短越明显。
【3】索引连接(index join)。
以两张表的等值连接为例,通过索引连接算法进行等值连接,要求第二张表的包含在连接条件中的属性已建立索引。
算法的步骤是:

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值