这是我参与「第五届青训营 」伴学笔记创作活动的第 5 天
基础架构
SQL返回类型
返回接口
- MySQL执行一跳查询SQL时,数据逐条返回(SQL接口),所有数据一次返回可能导致内存问题
- 从行记录中筛选出最终结果,需要在SQL接口中完成,(多表联查、数据合并)
- 当查询到数据后,在正式向客户端返回之前,会将结果集放入到缓存中
数据库设计
三大范式
范式:设计数据库时需要遵守的一些原则
第一范式
确保原子性:数据具备不可再分性
第二范式
确保唯一性:要求所有列的数据都依赖于主键,不能有任何一列数据与主键没有关系
第三范式
确保独立性:表中每一列数据不能与主键之外的字段有直接关系
BC范式
第三范式的基础上要求:任何主属性不能对其他主键子集存在依赖(联合主键中的某列值,不能与联合主键中的其他列存在依赖关系)
第四范式
多值依赖:表中的字段之间存在一对多的关系,一个字段的具体值会由多个字段来决定
第五范式(完美范式)
建立在4NF的基础上,进一步消除表中的连接依赖,直到表中的连接依赖都是主键所蕴含的
域键范式(终极范式)
试图研究出一个库表设计时的终极完美范式
Tips:在一般实际开发中,对于库表的设计最高满足BC范式即可。
反范式设计
随意设计出的结构,不满足范式要求,同时还无法给业务上带来收益的,这并不被称为反范式设计,反范式设计是一种刻意为之的思想。
MySQL索引
快速检索数据,存储引擎实现,存储形式由索引的数据结构决定。 Tips:数据量较小时就要建立好索引
索引
# 创建索引
CREATE INDEX indexName ON tableName (columnName(length) [ASC|DESC]);
ALTER TABLE tableName ADD INDEX indexName(columnName(length) [ASC|DESC]);
CREATE TABLE tableName(
columnName1 INT(8) NOT NULL,
columnName2 ....,
.....,
INDEX [indexName] (columnName(length))
);
查看、删除索引
# 查看
SHOW INDEX FROM tableName;
# 删除
DROP INDEX indexName ON tableName;
# 显示指定索引,减少优化器选择索引的时间
SELECT * FROM table_name FORCE INDEX(index_name) WHERE .....;
参考文献:
- 专栏阅读笔记:juejin.cn/column/7140…