这是我参与「第五届青训营」伴学笔记活动的第十四天
SQL引擎
进行词法分析,把词分成关键词,表列名,常量,运算符等, 语法分析 通过 语义分析:检查是表否存在,是否合法等,类型校验。 optimizer:选择最优的方式构造生成树,先进行规则方式分析。总是小表先连接。 scan优化:唯一到普通到全表。 基于代价的优化器: executor: 火山模型:函数栈一层层调用并返回,算子独立实现。
向量化模型:返回一批数据,函数调用万分之一次,cache命中率更高可调用simd机制,在一条cpu指令中可以计算多条数据。
编译执行:动态编译执行技术,生成计划树,动态生成代码路径
存储引擎
inmemory数据缓存,改变buffer ondisk:系统表存储元信息,undo表,redo表存日志,和用户信息 buffer pool:每一个页面 实体完整性:表中的一行代表一个实体,表中不能有重复的行。 域完整性:域即字段,域完整性用来保证字段的取值是合理的。 引用完整性:一个表中的字段可以引用另外一个表的记录。如果某条记录被另外一个表中字段引用,那么该记录不能被删除。 自定义完整性:除了以上三种基本的完整性约束,不同版本的RDBMS在实现时,还可以根据具体的应用环境,自己制定一些其他的完整性约束。
数据库范式
范式的目的在于:1、消除冗余数据,比如,不应该将两份相同的数据存储存储到不同的表中。2、确保数据之间的关联性是有意义的。以上两点不但能减少数据库占用的存储空间,还能确保数据之间有清晰的逻辑关系。