一、MySQL三大范式
MySQL的三大范式能够规范开发人员对数据表的设计,使得开发人员能够设计出简洁、优雅的数据表结构
1.1、第一范式
第一范式主要是确保数据表中每个字段的值必须具有原子性,也就是说数据表中每个字段的值为不可再次拆分的最小数据单元
1.2、第二范式
第二范式是指在第一范式的基础上,确保数据表中除了主键之外的每个字段都必须依赖主键。
1.3、第三范式
第三范式是在第二范式的基础上,确保数据表中的每一列都和主键字段直接相关,也就是说,要求数据表中的所有非主键字段不能依赖其他非主键字段
1.4、反范式化
如果数据库中的数据量比较大,系统的UV和PV访问频次比较高,则完全按照MySQL的三大范式设计数据表,读数据时会产生大量的关联查询,在一定程度上会影响数据库的读性能。此时,可以通过在数据表中增加冗余字段来提高数据库的读性能
二、MySQL存储引擎
存储引擎在MySQL底层以组件的形式提供,不同的存储引擎提供的存储机制、索引的存放方式和锁粒度等不同
2.1、查看MySQL中的存储引擎
SHOW ENGINES
查看MySQL中的存储引擎.png
2.2、常用存储引擎
2.2.1、InnoDB存储引擎
- 1、支持事务
- 2、锁级别为行锁,比 MyISAM 存储引擎支持更高的并发
- 3、能够通过二进制日志恢复数据
- 4、支持外键操作
- 5、在索引存储上,索引和数据存储在同一个文件中,默认按照B+Tree组织索引的结构。同时,主键索引的叶子节点存储完整的数据记录,非主键索引的叶子节点存储主键的值
- 6、在 MySQL5.6版本之后,默认使用 InnoDB存储引擎
- 7、在 MySQL5.6版本之后,InnoDB存储引擎支持全文索引
2.2.2、MyISAM存储引擎
- 1、不支持事务
- 2、锁级别为表锁,在要求高并发的场景下不太适用
- 3、如果数据文件损坏,难以恢复数据
- 4、不支持外键
- 5、在索引存储上,索引文件与数据文件分离
- 6、支持全文索引
2.2.3、MEMORY存储引擎
- 1、不支持TEXT和BLOB数据类型,只支持固定长度的字符串类型。如,在memory存储引擎中,会将varchar类型自动转化成char类型
- 2、锁级别为表锁,在高并发场景下会成为瓶颈
- 3、通常会被作为临时表使用,存储查询数据时产生中间结果
- 4、数据存储在内存中,重启服务器后数据会丢失。如果是需要持久化的数据,不适合存储在memory存储引擎的数据表中
2.2.4、ARCHIVE存储引擎
- 1、支持数据压缩,在存储数据前会对数据进行压缩处理,适合存储归档的数据
- 2、只支持数据的插入和查询,插入数据后,不能对数据进行更改和删除,而只能查询
- 3、只支持在整数自增类型的字段上添加索引
2.2.5、CSV存储引擎
- 1、主要存储的是.csv格式的文本数据,可以直接打开存储的文件进行编辑
- 2、可以将MySQL中某个数据表中的数据直接导出为.csv文件,也可以将.csv文件导入数据表中
网友评论