数据库系统概论(三)关系查询处理
关系查询处理
查询处理的四个步骤:查询分析、查询检查、查询优化、查询执行
1.查询分析
对查询语句进行:词法分析(识别出正确的语言符号)
语法分析(语法检查)
和编译器的原理是一样的
2.查询检查
①有效性检查(语义分析):从数据字典中找到有关模式定义的信息检查检查语句中的数据库对象(关系、属性)是否存在和有效
②视图转换(符号名转换):如果是对视图的操作,用视图消解方法把对视图的操作转换成对基本表的操作
③安全性检查:根据数据字典中的用户权限信息对存取权限进行检查
④完整性检查:根据数据字典中的完整性约束进行检查,这时的完整性检查是初步、静态的检查。
检查通过后便把SQL查询语句转换成内部表示,即等价的关系代数表达式。
这个过程中要把数据库对象的外部名称转换为内部表示。关系数据库管理系统一般都用查询树,也称为语法分析树来表示扩展的关系代数表达式。
3.查询优化
代价模型:①集中性数据库:磁盘存取块数(I/O代价)、处理时间(CPU代价)、内存代价
②分布式数据库:总代价=I/O代价+ CPU代价+ 内存代价+ 通信代价
①代数优化(逻辑优化):指关系代数表达式的优化。按照一定的规则,通过对关系代数表达式进行等价变换,改变代数表达式中操作的次序和组合,使查询执行更高效。
代数优化启发式规则
(1)选择运算尽可能先做
(2)投影运算和选择运算同时运行
(3)把投影和其前后的双目运算结合起来
(4)把某些选择和在它前面的笛卡尔积结合起来成为一个连接运算
(5)找出公共子表达式
②物理优化:指存取路径和底层操作算法的选择。选择的依据可以是基于规则的,也可以是基于代价的,还可以是基于语义的。
选择操作启发式规则
对于小关系,采用全表顺序扫描,即使有索引
对于大关系
连接操作启发式规则
(1)如果两个表都已按照连接属性排序,选择排序-合并算法
(2)如果一个表有连接属性的索引,选择索引连接算法
(3)如果以上两条都不适用,其中一个表较小,选用Hash join算法
(4)嵌套循环方法,选用较小的表作为外表
查询优化的一般步骤:
①把查询转化为某种内部表示,通常是语法树
②利用优化算法,把原始的语法树转换成优化的形式(代数优化)
③选择底层的存取路径(物理优化)
④生成查询计划,选择代价最小的
4.查询执行
依据优化器得到的执行策略生成查询执行计划,由代码生成器生成执行这个查询计划的代码,然后加以执行,回送查询结果。