目录
1、相关定义:
数据库包括三个部分:语法分析器、优化器、执行引擎
其中优化器的作用是把关系表达式通过等价转换为查询树,寻找最优路径,生成最优执行计划,很大程度上决定了数据库的性能
2、当sql语句执行过程中的各个步骤:
语法分析(语法是否规范),语义分析(数据库对象是否存在,用户是否有权限),视图转换(将对视图的查询语句转换成对基表的查询语句),表达式转换(将复杂的sql语句转换为简单的等效连接表达式),选择优化器,选择连接方式,选择连接顺序(对多表连接来说,选择合适的连接顺序),选择搜索路径,执行生成计划
3、优化器的两种方式
3.1 基于规则的优化器(RBO)
基于前人已有的规则进行优化
3.2 基于代价的优化器(CBO)
根据代价评估模型,计算不同执行计划的代价,选择代价最小的进行优化
4、优化器的两个阶段
4.1 逻辑优化
4.1.1 关系表达式等价代换
目的:通过等价代换简化复杂的关系表达式,减少磁盘的I/O操作,减小占据的空间大小,提升查询效率
代换公式:连接、笛卡尔积交换律
连接、笛卡尔积结合律
选择、投影的串接定律
选择与投影的交换律
4.1.2 查询树的启发式规则
- 优先做选择和投影(选择条件在查询树上下推)
- 子查询的消除
- 连接、外连接、嵌套连接的消除
- 笛卡尔积尽量与其他操作合并(连接运算比笛卡尔积要快)
- 剪掉冗余操作(一些剪枝优化技术)、最小化查询块
-
找出公共子表达式
4.2 物理优化
涉及到底层数据存储以及执行算法的选择,目的是选择效率最高的存取路径和操作算法,以减少资源消耗和提升查询速度
4.2.1 启发式规则
基于经验法则
4.2.2 基于代价的算法
估算代价模型
4.2.3 单表,两表,多表
选择单表扫描方式、两表连接方式、多表连接顺序
解决例题:
例一:为减少查询优化器需要考虑查询计划的个数,查询优化可采用一系列的启发式方法减小搜索空间,请列出三条并解释原因。
1、优先进行投影和选择操作(在前期过滤掉不相关数据可以大规模减少后期的数据量)
2、优先笛卡尔积与其他操作合并(连接操作的代价远小于笛卡尔积操作)
3、保留公共子表达式(避免重复运算)