这是我参与「第五届青训营 」伴学笔记创作活动的第 15 天
一、基础
1.1 事务的ACID
- 原子性(Atomicity):事务是一个不可再分割的工作单元, 事务中的操作要么都发生,要么都不发生。
- 一致性(Consistency):数据库事务不能破坏关系数据的完整性以及业务逻辑上的一致性。
- 隔离性(Isolation):多个事务并发访问时,事务之间是隔离的,一个事务不应该影响其它事务运行效果。
- 持久性(Durability):在事务完成以后,该事务所对数据库所作的更改便持久的保存在数据库之中,并不会被回滚。
1.2 SQL语言
SQL功能极强,但由于设计巧妙,语言十分简洁,完成数据定义、数据操纵、数据控制的核心功能只用了9个动词: CREATE、ALTER、 DROP、 SELECT、INSERT、UPDATE、DELETE、GRANT、REVOKE。且SQL语言语法简单,接近英语口语,因此容易学习,也容易使用。
- 语法风格接近自然语言
- 高度非过程化
- 面向集合的操作方式
- 语言简洁,易学易用
二、关键技术
2.1 SQL引擎
2.1.1 Parser
解析器(Parser)一般分为词法分析( Lexical analysis)、语法分析( Syntax analysis )、语义分析( Semantic analyzer )等步骤。
- 词法分析:将一条SQL语句对应的字符串分割为一个个token, 这些token可以简单分类。
- 语法分析:把词法分析的结果转为语法树。根据token序列匹配不同的语法规则,根据语法规则匹配SQL语句中的关键字,最终输出一个结构化的数据结构。
- 语议分析:对语法树中的信息进行合法性校验。
2.1.2 Optimizer
基于规则优化(RBO)
- 条件化简
- 表连接优化:总是小表先进行连接
- Scan优化:唯一索引、普通索引、全表扫描
数据库索引:是数据库管理系统中辅助数据结构,以协助快速查询、更新数据库表中数据。目前数
据库中最常用的索引是通过B +树实现的。
基于代价优化(CBO)
一个查询有多种执行方案,CBO会选择其中代价(时间、io、cpu、net、mem...)最低的方案去真正的执行。
2.1.3 Executor
火山模型、向量化、编译执行(LLVM动态编译执行技术)
参考链接
[RDBMS 关键技术分析 - 掘金 (juejin.cn)](