[TOC] ## 垂直切分的依据 当一个表属性很多时,如何来进行垂直拆分呢?如果没有特殊情况,拆分依据主要有几点: 1. 将长度较短,访问频率较高的属性尽量放在一个表里,这个表暂且称为主表 2. 将字段较长,访问频率较低的属性尽量放在一个表里,这个表暂且称为扩展表 如果1和2都满足,还可以考虑第三点: 3. 经常一起访问的属性,也可以放在一个表里 优先考虑1和2,第3点不是必须。另,如果实在属性过多,主表和扩展表都可以有多个 ### 注意 需要同时访问主表和扩展表中的属性时,服务层不要使用join来连表访问,而应该分两次进行查询 原因是,大数据高并发互联网场景下,一般来说,**吞吐量和扩展性**是主要矛盾 1. join更消损耗数据库性能 2. join会让base表和ext表耦合在一起(必须在一个数据库实例上),不利于数据量大时拆分到不同的数据库实例上(机器上)。毕竟减少数据量,提升性能才是垂直拆分的初衷