1,表的水平划分
如果一个表的记录数太多,比如成千上万条,而且需要经常检索,那么我们有必要化整为零。如果我拆成100个表,那么每个表只有10万条记录。当然需要数据在逻辑上可以划分。一个好的划分依据,有利于程序的简单实现,也可以充分利用水平分表的优势。比如系统界面上只提供按月查询的功能,那么把表按月拆分成12个,每个查询只查询一个表就够了。如果非要按照地域来分,即时把表拆的再小,查询还是要联合所有表来查,还不如不拆了。所以一个好的拆分依据是最重要的。
比如qq用户信息,单个user数据表存储太卡,可以做100个相同的user表,分别是user_0,user_1,............user_99,插入新用户时候,根据k=qqId/100,插入到user_k数据表。
2,表的垂直划分
有些表记录数不多,可能也就2、3万条,但是字段却很长,表占用空间很大,检索时需要执行大量I/O,严重降低了性能。这个时候需要把大的字段拆分到另一个表,并且该表与原表是一对一的关系。
比如学生答题表,student数据表字段有id,name,score,email,question,answer。其中question和answer数据比较大,可以将这两个字段分离出去,形成一个单独的表,垂直划分后数据表如下,student数据表 id,name,score,email。paper数据表 id,stuId,question,answer。