关系查询处理和查询优化
学习目标
- 理解查询处理的基本概念和过程
- 掌握关系代数表达式的优化方法
- 了解查询执行计划的生成和选择
- 掌握连接算法的基本原理
- 理解查询优化器的工作原理
- 了解查询性能调优的基本方法
8.1 查询处理概述
8.1.1 查询处理的步骤
8.1.2 查询处理器的组成
8.2 查询优化概述
8.2.1 查询优化的必要性
8.2.2 查询优化的分类
8.3 关系代数表达式的优化
8.3.1 关系代数等价变换规则
8.3.2 查询树的优化
8.3.3 启发式优化规则
8.4 查询执行计划的生成
8.4.1 执行计划的表示
8.4.2 连接顺序的选择
对于n个关系的连接,可能的连接顺序数量:
8.5 物理查询优化
8.5.1 连接算法
嵌套循环连接(Nested Loop Join)
排序合并连接(Sort-Merge Join)
散列连接(Hash Join)
8.5.2 选择算法
8.5.3 代价估算模型
8.6 查询优化器
8.6.1 优化器的分类
8.6.2 优化器的工作流程
8.6.3 统计信息的维护
8.7 查询优化实例
8.7.1 多表连接优化
原始查询:
sql
SELECT S.Sname, C.Cname, SC.Grade
FROM Student S, Course C, SC
WHERE S.Sno = SC.Sno
AND C.Cno = SC.Cno
AND S.Sdept = 'CS'
AND SC.Grade > 85;8.7.2 子查询优化
原始查询:
sql
SELECT Sname
FROM Student
WHERE Sno IN (SELECT Sno FROM SC WHERE Cno = 'C1');优化为连接:
sql
SELECT DISTINCT S.Sname
FROM Student S, SC
WHERE S.Sno = SC.Sno AND SC.Cno = 'C1';8.8 查询性能调优
8.8.1 性能调优策略
8.8.2 常见性能问题
8.9 学习检查点
8.9.1 重点概念总结
8.9.2 练习题
查询优化练习
- 给定SQL查询,画出查询树
- 应用等价变换规则优化查询树
- 分析不同执行计划的代价
连接算法分析
- 比较不同连接算法的适用场景
- 计算连接操作的I/O代价
- 选择最优的连接算法
性能调优实践
- 分析慢查询的原因
- 设计索引优化方案
- 重写查询提高性能
8.9.3 思考题
- 为什么查询优化对数据库系统如此重要?
- 基于规则的优化和基于代价的优化各有什么优缺点?
- 如何选择合适的连接算法?
- 统计信息对查询优化有什么影响?
本章小结:查询处理和优化是数据库系统的核心技术之一。通过代数优化和物理优化,可以显著提高查询性能。理解各种连接算法的原理和适用场景,掌握查询优化的基本方法,对于数据库应用开发和性能调优具有重要意义。现代数据库系统都配备了复杂的查询优化器,能够自动选择高效的执行计划。
上一章: 第7章 数据库设计
下一章: 第9章 数据库恢复技术