记录些基础的东西
数据库设计三范式
在我们设计数据库时,要遵循最基本的三范式
第一范式:关系型数据库,每条字段信息不可分解,可以理解为数据都有原子性
举例:数据库中有address这个字段,但我们常常将它分解为province,city,area,这样算是数据库第一范式
第二范式:在1NF的基础上,每条数据都是唯一的,也就是说每条数据都有primary key与其对应。要求实体的属性完全依赖于primary key。所谓完全依赖是指不能存在仅依赖主primary key一部分的属性
第三范式:在2NF的基础上,个人理解就是数据表中不能有冗余数据。
反三范式举例:
数据库中有张相册表ablum_info,相册表有主键id,然后相片中有自己的主键id,外键ablum_id,浏览次数view_count。然后我们需要得到某个相册的总浏览次数,我们可以通过sum(view_count)实现,但是我们经常是将view_count冗余到相册表。
InnoDB 和MyISAM
MyISAM快读,InnoDB完全的事务支持,前者注重性能,后者注重事务。
事实并不是这样,mysql在高并发状态下性能瓶颈很明显,主要原因是锁机制导致的堵塞
MyISAM采用的是全表锁定,而InnoDB采用的是行级锁。行级锁要比表级锁更加耗内存。
但是在系统并发访问量较高时,InnoDB的性能要优于MyISAM 同时 。InnoDB的索引不仅缓存索引本身,也缓存数据,所以
InnoDB需要更大的内存。
选择合适的存储引擎是优化的第一步
R/W概念,读写比概念
在数据库中执行 show global status得到系统的当前状态。在这些变量中, 形如com_xxx语句表示XXX语句执行的
次数,如com_select代表select执行的次数,以此类推。通过计算读类型和写类型的语句比例,即可粗糙的确定一个
读写比例。理想的读写比例是 100:1 当读写比例达到10:1时,就认为是以写为主的数据库了。一般来说,这个值在30:1左右。
选择存储引擎的基本原则:
1 采用MyISAM 引擎
- R/w>100:1且update相对较少
- 并发不高,不需要事务
- 表数据量小
- 硬件资源有限
2 采用InnoDB引擎
- R/w比较小,频繁更新大字段
- 表数据量超过1000万,并发高
- 安全性和可用性要求高