系统篇——1.查询处理和查询优化
1 查询处理
1.1 查询处理的步骤
与编译器进行编译的步骤有点像,先对内容进行解析,优化然后执行。实际上执行查询的步骤就是对SQL语句进行编译并且执行的步骤。
查询分析
对语句进行扫描、词法分析和语法分析。从查询语句中识别出语言符号。处理语法错误。
1 | graph TB |
查询检查
对合法的查询语句进行语义检查。名称是否存在、视图操作转化为基本表操作、用户权限和完整性检查。将数据库对象的外部名称抓华为内部表示,生成等价的关系代数表达式,使用查询树(语法分析树)来扩展关系代数表达式。
1 | graph TB |
查询优化
每个查询都会有许多可供选择的执行策略和操作算法,查询优化就是选择一个搞笑执行的查询处理策略。
代数优化指关系代数表达式的优化,按照一定的规则,通过对关系代数表达式进行等价变化,改变代数表达式中操作的次序和组合,使得查询效率更加高效。
物理优化指存取路径和底层操作算法的选择。选择可以使基于规则、代价、语义的。
1 | graph TB |
查询执行
依据优化器得到的执行策略生成查询执行计划。由代码生成器生成执行查询计划,回送查询结果。
1.2 查询操作的算法示例
选择操作的实现
连接操作的实现
- 嵌套循环算法
- 排序-合并算法
- 索引连接算法
- hash join算法
2 查询优化
查询优化可以分为代数优化、物理优化。也就是逻辑优化和非代数优化。
代数优化是指关系代数表达式的优化,物理优化则是通过存取路径和底层操作算法的选择进行优化。
今天已经很累了,下次学习数据库的时候进行补充。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Estom的博客!










