Skip to content

关系查询处理和查询优化 ​

学习目标 ​

  • 理解查询处理的基本概念和过程
  • 掌握关系代数表达式的优化方法
  • 了解查询执行计划的生成和选择
  • 掌握连接算法的基本原理
  • 理解查询优化器的工作原理
  • 了解查询性能调优的基本方法

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 练习题 ​

  1. 查询优化练习

    • 给定SQL查询,画出查询树
    • 应用等价变换规则优化查询树
    • 分析不同执行计划的代价
  2. 连接算法分析

    • 比较不同连接算法的适用场景
    • 计算连接操作的I/O代价
    • 选择最优的连接算法
  3. 性能调优实践

    • 分析慢查询的原因
    • 设计索引优化方案
    • 重写查询提高性能

8.9.3 思考题 ​

  1. 为什么查询优化对数据库系统如此重要?
  2. 基于规则的优化和基于代价的优化各有什么优缺点?
  3. 如何选择合适的连接算法?
  4. 统计信息对查询优化有什么影响?

本章小结:查询处理和优化是数据库系统的核心技术之一。通过代数优化和物理优化,可以显著提高查询性能。理解各种连接算法的原理和适用场景,掌握查询优化的基本方法,对于数据库应用开发和性能调优具有重要意义。现代数据库系统都配备了复杂的查询优化器,能够自动选择高效的执行计划。


上一章: 第7章 数据库设计
下一章: 第9章 数据库恢复技术

数据库原理课程学习笔记