这是我参与「第五届青训营」笔记创作活动的第八天
一、发展历史
1、前DBMS时代
人工管理
在计算机发明出来以前,通过人工的方式进行数据记录与管理
如“结绳记事”“账本”等
文件系统
1950年,现代计算机出现,数据存储进入磁盘时代,此阶段数据管理直接通过文件系统来实现
2、DBMS时代
1960年,数据库管理系统(DBMS)产生
DBMS:按照某种数据模型来组织、存储和管理数据的仓库
通常按照数据模型的特点将传统数据库系统分成三类:网状数据库、层次数据库、关系数据库
- 网状模型
- 能直接描述现实世界
- 存取效率较高
- 层次模型
- 结构简单
- 查询效率高
- 可以提供较好的完整性支持
- 关系模型
- 实体间的联系都通过二维表结构表示
- 可以方便地表示M:N关系
- 数据访问路径对用户透明
3、SQL语言
- 语法风格接近自然语言
- 高度非过程化
- 面向集合的操作方式
- 语言简洁,易学易用
二、关键技术
1、SQL引擎
(1) parser
解析器一般分为词法分析、语法分析、语义分析等步骤
(2) optimizer
优化器,基于规则优化内容
- 条件化简:
a = 5 and b > a -> a = 5 and b > 5 - 表连接优化:总是小表先进行连接
- Scan优化
- 唯一索引
- 普通索引
- 全表扫描
(3) Executor
每个operator调用next操作,访问下层operator,获得下层operator返回的一行数据,经过计算后,将这行数据返回给上层
优点:每个算子独立抽象实现,相互之间没有耦合,逻辑结构简单
缺点:每计算一条数据有多次函数调用开销,导致CPU效率不高
向量化
每个operator每次操作计算的不再是一行数据,而是一批数据
编译执行
将所有的操作封装到一个函数里,函数调用的代价也能大幅降低
2、存储引擎
innoDB、Buffer Pool、Page、B+ Tree