水平分表
水平分表就是把一个表的数据分开存储。每个表结构都一样,只不过每个表放的数据是不同的,所有表的数据加起来就是全部数据。
举例
拆分前
假设用户表 t_user
含有字段:id
,name
, sex
, age
, create_time
。
拆分后
假设现在有需求要统计用户性别,那么可以建立2张表: t_user_male
和 t_user_female
。新增用户,当用户性别为男时,存入 t_user_male
表中;当用户为女时,将数据存入 t_user_female
表中。这样用户表的数据会一分为2,单表数据量会缩小,执行数据库操作时效率会增高。
如果后期表数据过大时,还可以继续按照年龄段水平分表。实际开发中,分表策略还要根据实际情形来制定。
垂直分表
垂直分表就是把一个表拆分为多个表。每个表结构都不一样,表与表之间通过外键性质的字段进行关联。一般情况是根据表字段查询次数来拆分表,查询次数少的字段根据需要提取到一个表或多个表中,查询次数多的字段根据需要提取到一个表或多个表中。
举例
拆分前
假设文章表 t_article
含有字段:id
, content
, url
, create_time
。
拆分后
t_article
拆分为 t_article
和 t_article_content
, t_article
中字段:id
, url
, create_time
,t_article_content
中字段:id
, content
, article_id
, create_time
。
因为 content
字段包含的数据较多,影响查询效率且查询热度低,所以将 content
字段单独提取出来,并在表中加入 article_id
与 t_article
进行关联。
转载于:https://juejin.im/post/5d08a1c26fb9a07ed136d738