数据库查询优化与计划选择
立即解锁
发布时间: 2025-08-23 00:16:26 阅读量: 2 订阅数: 13 

# 数据库查询优化与计划选择
## 1. 引言
在进行理论推导之前先获取数据是非常重要的,否则就会不自觉地扭曲事实以适应理论,而非让理论适应事实。就像学习弹钢琴,过去三个世纪以来人们尝试了许多不同的方法,传统的建议是找专业老师一对一授课,也有人尝试自学,比如使用像《钢琴傻瓜书》这样的书籍、观看教学视频或者直接拿乐谱开始弹奏。而且在学习一首曲子时,也有多种方式,如先分开练习双手再合起来、从一开始就双手一起练、分段学习等。为了达到最终目标,实际上有几十种甚至上百种途径可以获得最终“正确”的结果,虽然结果的质量可能有所不同,但可以通过多种方式实现。
对于数据库查询来说,同样存在多条路径可以得到相同的结果,因此能够分析不同路径的结果质量非常重要,也就是要能够分析系统在每条通往正确结果路径上的性能,并选择最佳路径。接下来我们将聚焦于查询优化的基本概念,以理解物理数据库设计和查询处理之间的相互作用。
## 2. 查询优化基础示例
我们先从一个简单的查询优化示例开始,说明如何应用输入/输出(I/O)时间估计技术来确定哪个查询执行计划是最佳的。这里主要关注寻找最佳查询执行计划所需的实际权衡分析过程。
## 3. 查询处理和优化步骤
### 3.1 查询处理的基本步骤
查询处理主要有以下三个基本步骤:
1. **扫描、解析和分解 SQL 查询**:此步骤会检查 SQL 查询语法是否正确,并在必要时生成相应的错误消息。该步骤的输出是查询的一种中间形式,称为查询树或查询执行计划。
2. **查询优化**:该步骤包括局部优化和全局优化。
- **全局优化**:确定连接的顺序以及选择和投影相对于连接的顺序,还涉及将嵌套连接查询重写为涉及相同连接的扁平查询,这是本文重点描述的主要概念。
- **局部优化**:确定选择和连接的索引方法。这两种优化都基于优化器生成的各种替代查询执行计划的成本(I/O 时间)估计。成本模型基于数据库模式和大小的描述,并查看查询中涉及的每个表的属性值统计信息。
3. **查询代码生成和执行**:此步骤使用经典的编程语言和编译器技术生成可执行代码。
下面用表格总结查询处理的基本步骤:
|步骤|描述|输出|
|----|----|----|
|扫描、解析和分解 SQL 查询|检查 SQL 查询语法,必要时生成错误消息|查询树或查询执行计划|
|查询优化|包括局部和全局
0
0
复制全文
相关推荐










