第五章 查询处理和查询优化
- 基本内容
-
DBMS查询处理步骤;优化查询概念;基本方法和技术
- 查询步骤,类似于编译原理中高级语言的编译过程
-
基于关系代数内容
- 查询分析
-
词法分析,语法分析,语义分析
- 查询检查
-
安全性、完整性、有效性检查
- 建立查询内部表示(语法树)
- 查询优化
- 查询执行
- 选择操作实现
- 顺序扫描法
-
简单按照关系中元组的物理位置顺序扫描,选择出满足条件的元组,平均搜索代价: 总行数/2
- 二分查找法
-
选择条件是p = ‘’,选择的属性是有序且以此属性值相等比较,适合使用二分查找法,平均搜索代价: log(总行数)
- 如果选择是作用在非有序属性上,那么代价也会增加
- 索引查找法
-
常见有B+树索引和Hash索引
- 复合选择,逻辑合取,∩
-
选择条件p AND q。使用多个索引,在多个属性上建立索引,然后分别查找,取交集
- 复合选择,逻辑析取,∪
-
选择条件p OR q。若两个条件作用属性都有索引可以优化,取并集,否则只能顺序扫描法
- 连接操作实现,
-
连接操作是数据库操作中最复杂的,最坏情况是笛卡尔积
- 嵌套循环法
-
最基础的方法
- 索引嵌套循环法
-
利用索引减少查找时间,从而减少循环次数
- 排序合并法
-
对两个表连接属性进行排序,采用两个指针,指针一不动,指针二向下扫描,扫描到相同的元素进行连接,扫描到不同的元素,指针二下移。 两个表都只用扫描一次
- 散列连接法
-
将两个表的连接属性分别散列到一个Hash数组中,然后对散列到同一位置的元素进行连接
- 投影操作实现
-
如果投影列包含主键,直接投影,否则需要进行消除重复的操作
- 查询优化, @面试
- 特点
- 优化器可以从数据字典中获取统计信息,程序员编程时则不能使用
- 如果数据库物理结构变化了,那么DBMS可以自动重新优化
- 代数优化
-
基于关系代数对查询语句进行优化,不涉及底层的存储
- 策略
- 尽早执行选择操作, 减少中间关系,在语法树中,选择操作移动到叶端
- 投影操作和选择操作同时做, 避免重复扫描
- 将投影操作与前后的双目运算符结合, 减少扫描关系的遍数
- 选择和笛卡尔积结合成自然连接
- 执行连接操作前,可以对连接属性进行排序或者建立索引
- 找出公共子表达式
- 策略
- 基于存储路径优化
-
合理选择各种操作的存储路径,涉及底层物理存储实现
- 选择操作启发式规则,
- 对于小关系,直接使用顺序扫描法
- 对于大关系
- 条件是“主键=值”,由于选择元组少,使用主键索引
- 条件是AND合取,优先使用组合索引法
- 条件是OR析取,一般使用全表扫描法
- 其余,根据选择元组百分比,若较多使用顺序扫描法,否则使用主键索引
- 连接操作启发式规则,
-
和连接操作实现一样,有排序合并、索引连接、Hash连接法
- 选择操作启发式规则,
- 基于代价评估优化
-
访问存储器代价、存储代价、计算代价、内存使用代价、通信代价
- 数据字典中记录的统计信息
- 表
-
元组总数、元组长度、占用块数、占用溢出块数
- 列
-
列不同值的个数、选择率、最值、索引类型
- 索引
-
索引层数、不同索引值个数、叶节点个数
- 数据字典中记录的统计信息
- 特点