天天看点

数据库设计总结(面试官都馋哭了)

一、合理设置字段

在设计表是有个原则,在保证业务的基础上让字段尽可能小,能用INT就别用BIGINT,因为mysql的innoDB引擎索引结构是B+树,它的非叶子节点保存的是索引和指针,节点容量是固定的(16k),指针大小也是固定的(6字节),所以索引占用字节越少,就能让b+树的节点保存更多元素;

还有就是字段尽量设置成NOT NULL,这样mysql在检索数据的时候就会少做NULL判断,从而更好地发挥索引效果。

二、合理设计表结构

其实就是三范式:

第一范式:属性(字段)的原子性约束,要求属性具有原子性,不可再分割;

比如个人信息,个人信息不能作为一个字段,它可以再分为name、age、sex等;

第二范式:记录的惟一性约束,要求记录有惟一标识,每条记录需要有一个属性来做为实体的唯一标识;

第三范式:字段冗余性的约束,即任何字段不能由其他字段派生出来;主键没有直接关系的数据列必须消除,消除的办法就是再创建一个表来存放他们,当然外键除外;

当然,三范式只是一个规范,实际生产中不一定必须遵循

比如公司资产清点表:名称、单价、数量、总价;

这是违背了第三范式的,因为总价可以通过单价*数量得出

但是像这种结构我们是可以接受的,如果需要直接查询总价,就不用再单独计算,只是多了一个字段而已;

三、合理利用索引

索引虽然能大幅度提升查询效率,但是也有副作用:

1、额外增加索引文件;

2、读虽然快了,但是写会变慢;

注意事项:

索引字段应尽可能的小,尤其是主键;

如果有组合索引,注意最左匹配原则;

针对长字符串型字段,尽量用前缀索引;

如果有二级索引,注意避免回表查询;