MySQL-深入理解RDBMS | 青训营笔记

75 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 15 天

MySQL-深入理解RDBMS

1. 一条SQL语句的执行流程

  • SQL引擎:Parser、Optimizer、Executor
  • 事务引擎
  • 存储引擎:Data File、Log File

image.png

2. SQL引擎

2.1 SQL引擎-Parser

解析器(Parser)一般分为词法分析(Lexical analysis)、语法分析(Syntax analysis)、语义分析(Semantic analyzer)等步骤。

image.png

2.2 SQL引擎—Optimizer
  • 基于规则的优化(RBO, Rule Base Optimizer)
    • 表连接优先——总是小表先进行连接
    • Scan优化
      • 唯一索引
      • 普通索引
      • 全表扫描
      数据库索引:是数据库管理系统中辅助数据结构,以协助快速查询、更新数据库表中数据。目前数据库中最常用的索引是通过B+树实现的。
  • 基于代价的优化(CBO,Cost Base Optimizer),如一个查询有多种执行方案,CBO会选择其中代价最低的方案去真正地执行
2.3 SQL引擎-Executor
  • 火山模型 image.png 每个Operator调用Next操作,访问下层Operator,获得下层Operator返回的一行数据,经过计算之后,将这行数据返回给上层。

    • 优点:
      • 每个算子独立抽象实现,相互之间没有耦合,逻辑结构简单
    • 缺点:
      • 每计算一条数据有多次函数调用开销,导致CPU效率不高
  • 向量化模型

    image.png 每个Operator每次操作计算的不再是一行数据,而是一批数据(Batch N行数据),计算完成后向上层算子返回一个Batch。

    • 优点:
      • 函数调用次数降低为1/N
      • CPU cache命中率更高
      • 可以利用CPU提供的SIMD(Single Instruction Multi Data)机制
  • 编译执行

    image.png LLVM动态编译执行技术,将所有的操作封装到一个函数里面,函数调用的代价也能大幅度降低。