查询操作的实现
1、选择操作:
- 简单的全表扫描:顺序扫描,逐一检查每个元组;
- 索引(散列)扫描:选择条件有索引,可按索引扫描,用指针取元组;
- 对形如“条件1 and 条件2”选择的处理:
① 分别检索满足条件1的元组指针和满足条件2的元组指针,然后求两指针集合的交集,按交集指针取元组;
② 先检索满足条件1的元组指针集合,再在该结果集合中检索满足条件2的元组;
③ 全表扫描,直接检索出满足条件的元组。
2、连接操作:
- 嵌套循环法:对外层的每一个元组,检索内层的每一个元组;
- 排序合并法:对连接属性排序,然后进行归并;
- 索引连接法:若连接属性有索引,则直接进行归并。若没有则建立;
- 散列连接法:将连接属性散列到一个桶中,再进行连接。
查询优化
关系代数等价变换
查询的启发式优化
基于启发式规则的查询物理优化
1、选择操作的启发式规则
- 对于小关系使用全表顺序扫描,即使有索引;
- 对于选择条件为主码的等值查询,选择主码索引检索;
- 对于选择条件为非主码的值比较查询,并且选择列上有索引,则要估算结果的元组数目,若数目较少,则在索引上检索,否则在全表上检索;
- 对于用and连接的查询条件,若有涉及属性的组合索引,则优先采用组合索引检索;若只是某些属性上有索引,可采用选择操作的三种实现方法之一进行,否则采用全表检索;
- 对于用or连接的查询条件,一般使用全表顺序扫描。
2、连接操作的启发式规则
- 若两个表都已按连接属性排序,则选用排序合并法;
- 若一个表在连