关系系统及其查询优化
CouriourC Lv4

查询处理步骤

graph LR

Anylisis[查询分析]
Check[查询检查]
Opz[查询优化]
Exec[查询执行]

Anylisis --> Check --> Opz --> Exec;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

- 查询分析
- 词法
- 语法
- 语义
- 符号名转换
- 查询检查
- 安全性检查
- 完整性检查
- 查询优化
- 代数优化
- 启发式优化
- 物理优化
- 选用合适的存储方式
- 选择依据
- 基于规则
- 基于代价
- 基于语义
- 查询执行
- 代码生成

查询分析

首先对查询语句进行扫描,词法分析和语法分析。从查询语句中识别出语言符号,如:SQL 关键字,属性名和关系名等,进行语法检查和语法分析,即判断查询语句是否符合 SQL 语法规则。如果没有就转入下一步处理,否则带上 Syntax Error 🎭(痛苦面具)

查询优化的一般准则

  • 1.选择运算应尽可能先做。在优化策略中这是最重要、最基本的一条。它常常可使执行时节约几个数量级,因为选择运算一般使计算的中间结果大大变小
  • 2.在执行连接前对关系适当地预处理。预处理方法主要有两种,在连接属性上建立索引和对关系排序 。
  • 3.把投影运算和选择运算同时进行。如有若干投影和选择运算,并且它们都对同一个关系操作,则可以在扫描此关系的同时完成所有的这些运算以避免重复扫描关系。
  • 4.把投影同其前或其后的双目运算结合起来,没有必要为了去掉某些字段而扫描一遍关系
  • 5.杷某些选择同在它前面要执行的笛卡尔积结合起来成为一个连接运算,连接特别是等值连接运算要比同样关系上的笛卡尔积省很多时间
  • 6.找出公共子表达式。

[!NOTE] 小总结
说白了其实就是较少参与运算的数据量,那么在我们的关系运算中会导致数据量发生很大变化,及其变化量都会影响到。

 评论