在解决大数据量表的性能问题时,垂直切分(分表)也是一个常见的技术手段。
即根据业务需要,将一张大表按照列拆分为多个表。
MySQL实现垂直切分的主要方式有以下几种:
- 通过公共列关联
即将表中的一些字段Extract出去,形成一张小表。然后通过公共列关联查询。
具体步骤:
-- 将users表中的name、email等基本信息提取出去
CREATE TABLE basic_info(
id INT PRIMARY KEY,
name VARCHAR(50),
email VARCHAR(50)
)
-- users表只保存高频更新的信息
CREATE TABLE users(
id INT PRIMARY KEY,
level INT,
score INT,
FOREIGN KEY(id) REFERENCES basic_info(id)
)
-- 通过公共的id列进行关联查询
SELECT * FROM basic_info b JOIN users u ON b.id = u.id;
- 临时拆分
即新建一张临时表,将部分字段Extract过去,然后进行JOIN操作。
临时分表的优点是不影响原始表结构。 - 通过子查询分表
即在查询时使用子查询,将部分字段查询出来。
也是一种临时实现垂直分表的方式。
总的来说,以上三种方式均可实现MySQL表的垂直切分。
主要思路是提取”热点“字段到单独表中,减少表大小。
并通过公共列或子查询进行关联,获取完整的数据。