0 前言
数据库是大数据领域非常重要的一个部分,并且随着数据量不断增大和数据结构更加复杂,数据库技术将变得日益重要。笔者本科时修过数据库原理的课程,但当时仅从应用的角度去看,甚至都不能算有角度,只能说学了一点sql语句,甚是浅显,说一无所知都不过分。目前笔者处在研究生阶段,研究方向为大数据与数据挖掘,经过学习和探索,笔者认为数据库是本领域最重要的三项技术之一,其他两项分别为数据挖掘算法和云计算技术,有机会也会进行探讨与分享。本系列内容将是我在重读王珊、萨师煊编著,高等教育出版社出版的《数据库系统概论(第5版)》的过程中的笔记和思考,笔者将从数据库原理、数据库设计与编程、关系数据库原理和数据库技术的应用四个方面进行梳理。
1 关系数据库概
2 关系数据库标准语言SQL
3 关系数据库的规范化
4 关系数据库编程
5 关系查询处理和查询优化
(1)查询处理
查询处理包括4个阶段:查询分析、查询检查、查询优化、查询执行。查询分析是对查询语句进行词法分析和语法分析,判断是否合法;查询检查是进行语义检查,检查数据库对象是否存在,检查完整性约束是否满足,并利用查询树(又称语法分析树)将查询语句转换为关系代数表达式;查询优化是选择一个高效执行的查询处理策略,分为代数优化和物理优化;查询执行是由代码生成器生成执行查询计划的代码,加以执行后返回查询结果。
选择操作的实现:只涉及一个关系,一般采用全表扫描或者基于索引的算法。
连接操作的实现:解决方法有嵌套循环算法、排序-合并算法、索引连接算法、hash join算法。
(2)查询优化
给出系统级的查询优化不仅使用户不必考虑如何最好地表达查询以获得较高的效率,而且系统可以比用户程序优化的更好。目前关系数据库管理系统通过某种代价模型计算出各种查询执行策略的执行代价,然后选取代价最小的执行方案。集中式数据库的查询代价包括磁盘存取块数(I/O代价)、处理机时间(CPU代价)、查询的内存开销(内存代价),分布式数据库中还要加上通信代价。
(3)代数优化
代数优化是通过对关系代数表达式进行等价交换,改变代数表达式中操作的次序和组合,来提高查询效率。
常用等价变换规则:①连接、笛卡尔积的交换律;②连接、笛卡尔积的结合律;③投影的串接定律;④选择的串接定律;⑤选择与投影操作的交换律;⑥选择与笛卡尔积的交换律;⑦选择与并的分配律;⑧选择与差运算的分配律;⑨选择对自然连接的分配律;⑩投影与笛卡尔积的分配律;11投影与并的分配律。
启发式优化规则:①选择运算应尽可能先做;②把投影运算和选择运算同时进行;③把投影同其前或后的双目运算结合起来;④把某些选择同在它前面要执行的笛卡尔积结合起来成为一个连接运算;⑤找出公共子表达式。
(4)物理优化
物理优化是选择高效合理的操作算法或存取路径,求得优化的查询计划,达到查询优化的目标。主要有三种方法:基于规则的启发式优化、基于代价估算的优化、结合两者的优化方法。
基于启发式规则的优化:根据不同的情况定性的选择更优的存取路径或操作算法。
基于代价估算的优化:根据数据库的状态信息计算各种操作算法的执行代价,定量的选择最优的查询方式。
(5)查询计划的执行
查询计划的执行可分为自顶向下和自底向上两种执行方法,自顶向下的执行方式是一种被动的、需求驱动的执行方式,而自底向上的执行方式是一种主动的执行方式。
网友评论