主键设计
主键尽量不要使用业务字段:
- 数据和主键索引是绑定一起的,业务字段更新频繁,一旦修改,索引也要跟着变
- 使用主键自增的性能会快很多,主键自增就会让数据顺讯添加到表中
多表关系
在设计数据库的时候,表间关系尽量避免出现多对多,当出现多对多的时候 应当引入第三个表,是多对多变成1对多
逻辑删除与反范式
- 为了查询效率,可以做冗余字段的设计(空间换时间,属于一种反范式设计)
- 在删除的时候 使用逻辑逻辑删除 不使用物理删除
三范式设计目的:减少冗余字段和重复数据
- 字段具有原子性,不可拆分
- 依赖于全部主键,而非部分主键
- 只依赖于主键,非主键字段互不依赖
反范式设计目的:满足业务逻辑,提高查询速度
字段类型
1.能用整型就用整数类型
2.char 和varchar
- char 不可变,查询效率高,可能造成存储浪费
- varchar 可变,查询效率不如char 节省空间
主键和被索引的字段不能为NULL ,索引不存储NULL,查询时不会去统计,所有在索引字段需要为NULL的时候可以设置为0
对于字段一定不要忘了考虑其是否可以设置为默认值
选择合适的引擎
innoDB :
- innoDB给mysql提供了具有提交,回滚和崩溃恢复能力的事物安全(ACID兼容)存储引擎
- 支持行级锁和表级锁
- 并发访问时效率高(事务和行级锁的原因)
- 数据恢复可食用事务日志,恢复速度快,
- 支持外键约束
- 插入/更新/主键查询速度快
- 需要内存和硬盘多,相较耗费资源
MyISAM :
- 不支持事务,
- 不支持外键约束
- 只支持表级锁
- 批量查询/插入/count()速度快
- 简单,适合小型项目/以批量插入和查询为主的系统(内部管理系统)
- 查询多 MyISAM会更快