chapter05_查询处理和查询优化_1_关系数据库系统的查询处理过程与算法

  • 查询处理的过程

    (1) 查询分析

    检查语法错误

    (2) 查询检查

    语义检查、用户权限检查、完整性约束检查

    (3) 建立查询的内部表示

    生成语法树

    (4) 查询优化

    代数优化:关系代数表达式的等价变换

    物理优化:结合索引、数据值的分布特征改善查询

    代价估算:评估若干查询计划的效率

    (5) 查询执行

    分为 解释 和 __编译__两种

    解释执行:对于每一条查询语句,DBMS都不保留可执行代码,每次都重新解释执行查询语句;

    编译执行:运行前先编译,生成可执行代码

  • 执行选择操作的算法 SELECT XXX FROM XX <条件>;

    (1) 顺序扫描:按照元组的物理顺序逐个扫描

    适用于元组少,被选中的元组比例高的情况

    (2) 二分查找:如果物理文件有序,则用二分查找算法

    (3) 索引(或散列): 如果选择条件涉及的列上有索引,则通过索引查找满足条件的元组指针,然后通过该指针继续检索满足查询条件的元组

  • 执行复合选择操作的算法: 由合取(AND), 析取(OR)连接而成的复合选择条件

    (1) 合取AND

    组合索引

    适用于合取的几个列恰好组成了组合索引

    单独索引

    如果某一个属性上具有索引,则通过索引找到复合与该属性有关的查询条件的元组指针,通过元组指针得到符合该条件的元组,并对得到的元组检查其余的查询条件是否满足

    多个索引

    如果合取条件涉及的属性都存在索引,那么可以分别检索满足单个条件的元组指针集再求交集;如果只有部分属性存在索引,那么求交集后还要进行验证是否满足其他条件

    选择性:满足条件的记录数占记录总数的比例。最大为1,最小为0. 在DBMS数据字典中常常会记录选择性的估计值,这一值越小,越有必要有限使用这个条件来检索元组.

    (2) 析取OR

    只要任意一个条件没有索引,就只能用顺序扫描的方式

  • 连接操作的算法

    (1) 嵌套循环法

    把一个关系作为外循环,另一个关系作为内循环。顺序扫描外循环中的每一条记录,对于每一条记录,检索内循环的每条元组是否满足连接条件。

    一般地,使用记录较少的关系作为外循环。

    (2) 索引嵌套循环法

    嵌套循环法中,如果两个连接属性的一个属性存在索引或散列,则使用索引扫描代替顺序扫描

    (3) 排序合并法

    适用于自然连接和等值连接。如果两个关系按照连接属性,元组按照排序连续存放,那么可以同时对两个关系进行扫描,连接等值的元组。

    排序合并法只需要分别对两个关系扫描一次。

    (4) 散列连接法

    思路:以连接属性作为散列键,先对两个关系的连接属性分别使用同一个散列函数划分为几个hash桶,再进行桶内部的匹配检测。

    过程

    1° 划分阶段: 将记录数少的关系R的用于连接的属性值进行散列,将各个元组划分为不同的hash桶

    2° 试探阶段: 将另一个关系S的用于连接的属性值进行散列,然后与已经在桶中的R的元组进行匹配。

    散列连接法只需要分别对两个关系扫描一次。

    散列连接法的前提是较小的表可以在划分阶段完全放入内存中

  • 投影操作的算法

    (1) 如果要投影的列中包含了主键,则可以直接操作;

    (2) 如果要投影的列中不包含主键,但是没有加DISTINCT,则也可以直接操作;

    (3) 如果要投影的列中不包含主键,且加了DISTINCT,那么可以先对结果进行排序;或用散列法消除重复元组(检查每条记录是否与桶中的记录重复),消除重复元组

  • 集合运算的算法

    (1) 并、差、交

    分别对两个关系按照主键属性进行排序,然后分别对两个关系进行一次扫描

    (2) 笛卡尔积

    嵌套循环法

猜你喜欢

转载自blog.csdn.net/captxb/article/details/88081337