1 查询处理

1.1 查询处理的步骤

与编译器进行编译的步骤有点像,先对内容进行解析,优化然后执行。实际上执行查询的步骤就是对SQL语句进行编译并且执行的步骤。

查询分析

对语句进行扫描、词法分析和语法分析。从查询语句中识别出语言符号。处理语法错误。

1
2
3
graph TB
词法分析--> 语法分析

查询检查

对合法的查询语句进行语义检查。名称是否存在、视图操作转化为基本表操作、用户权限和完整性检查。将数据库对象的外部名称抓华为内部表示,生成等价的关系代数表达式,使用查询树(语法分析树)来扩展关系代数表达式。

1
2
3
4
5
graph TB
语义分析-->符号名转换
符号名转换-->安全性检查
安全性检查-->完整性初步检查
完整性初步检查-->生成查询树

查询优化

每个查询都会有许多可供选择的执行策略和操作算法,查询优化就是选择一个搞笑执行的查询处理策略。

代数优化指关系代数表达式的优化,按照一定的规则,通过对关系代数表达式进行等价变化,改变代数表达式中操作的次序和组合,使得查询效率更加高效。

物理优化指存取路径和底层操作算法的选择。选择可以使基于规则、代价、语义的。

1
2
graph TB
代数优化-->物理优化

查询执行

依据优化器得到的执行策略生成查询执行计划。由代码生成器生成执行查询计划,回送查询结果。

1.2 查询操作的算法示例

选择操作的实现

连接操作的实现

  1. 嵌套循环算法
  2. 排序-合并算法
  3. 索引连接算法
  4. hash join算法

2 查询优化

查询优化可以分为代数优化、物理优化。也就是逻辑优化和非代数优化。
代数优化是指关系代数表达式的优化,物理优化则是通过存取路径和底层操作算法的选择进行优化。

今天已经很累了,下次学习数据库的时候进行补充。