首先来说讲三个数据库的三个范式数据库
三个范式:
第一范式(1NF):数据库表中的字段都是单一属性的,不可再分。1NF是全部关系型数据库的最基本要求。并发
第二范式(2NF):在第一范式的基础上,消除非主属性对码的部分函数依赖。能够理解为要有主键,要求其余字段都依赖于主键。数据库设计
第三范式(3NF):在第二范式的基础上,消除了非主属性对于码的传递函数依赖。消除传递依赖,能够看作是“消除冗余”,消除冗余应该比较好理解一些,就是各类信息只在一个地方存储,不出如今多张表中。非主键外的全部字段必须互不依赖。函数
结论:若是符合第三范式要求的数据库设计,基本上就解决了数据冗余过大,插入异常,修改异常,删除异常的问题。固然,在实际中,每每为了性能上或者应对扩展的须要,常常 作到2NF或者1NF,可是做为数据库设计人员,至少应该知道,3NF的要求是怎样的。高并发
数据库优化:
- 设计表的时候,适度冗余字段,减小join操做
- 选择恰当的数据类型,好比自定义类型
- 对于一些比较频繁的做为查询条件的字段创建索引,惟一性太差的字段不适合建立索引。
- 开启慢查询日志找出效率低下的SQL语句进行优化。
- 设计表的时候,全部表和字段都添加相应的注释:
- 设计数据库表时,加上三个字段: 主键、create_time、update_time
- 主键必定要加上的,没有主键的表示没有灵魂的,建立时间和更新时间对详细审计和跟踪记录都是有用的。
- 尽可能把全部列定义为NOT NULL
- 全部表尽可能InnoDB引擎,Innodb 「支持事务,支持行级锁,更好的恢复性」,高并发下性能更好,因此呢,没有特殊要求(即Innodb没法知足的功能如:列存储,存储空间数据等)的状况下,全部表必须使用Innodb存储引擎。
- 多字段表能够进行垂直分表优化,多数据表能够进行水平分表优化
垂直分表
- 经常使用的字段放在一个表中
- 不经常使用的字段放在另外一个表中
- 数据类型占用空间比较大的值也单独放表
水平分表
- 把一个id在一个范围以内(0-1000w,1000w-2000w)的分给一张表。缺点是:最先使用的数据库表的活跃用户比较低,就可能浪费数据库的使用空间
- 按余数分,要事先估算这个表n年以后,最大能存多少数据。按id划分,好比分红3个表就把id/3分别存储。缺点是:估算要建立多少表。(小公司)