一、三大范式
- 第一范式:每个字段是不可拆分的
- 第二范式:所有字段依赖于主键,一个表只描述一件事
- 第三范式:每个字段不能间接依赖主键,比如用户名称不能出现在订单表中
二、MySQL
1. InnoDB和MyISAM的区别
事务 | 速度 | 外键 | 行级锁 | |
---|---|---|---|---|
InnoDB | 支持 | 较慢 | 支持 | 支持 |
MyISAM | 不支持 | 快 | 不支持 | 不支持 |
2. 优化
2.1 核心
- 数据量预估,合理分库、分表
- 充分利用mysql缓存, 不如时间用变量
2.2 字段
- 少用或者拆分TEXT/BLOB
- 不存图片
2.3索引
- 字符字段加前缀索引(idx_xxx)
- 不在索引做运算
2.3 SQL类
- 拒绝大sql
- 事务范围小
- 尽量不用select *
- 不用OR, 用IN
2. 索引
类型 | |
---|---|
InnoDB | 聚类索引 |
MyISAM | 非聚类 |
- MySAM的索引文件和数据文件是分离的, B+树叶子节点的data域只保存数据的地址。 InnoDB节点的data域保存了完整的数据记录, 所以是聚类索引
- 辅助索引,InnoDB需要先查到主键,然后再去主索引拿到记录
- 读MyISAM快, 写innodb快
三、NoSQL
不支持事务, 占用空间大, 维护较难
1. MongoDB
- 弱一致性
- 文档结构
- 大数据集搜索
- 性能