Mysql学习 | 青训营笔记

72 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 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 .....;

参考文献: