MySQL如何实现垂直切分?

在解决大数据量表的性能问题时,垂直切分(分表)也是一个常见的技术手段。
即根据业务需要,将一张大表按照列拆分为多个表。

MySQL实现垂直切分的主要方式有以下几种:

  1. 通过公共列关联
    即将表中的一些字段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;
  1. 临时拆分
    即新建一张临时表,将部分字段Extract过去,然后进行JOIN操作。
    临时分表的优点是不影响原始表结构。
  2. 通过子查询分表
    即在查询时使用子查询,将部分字段查询出来。
    也是一种临时实现垂直分表的方式。

总的来说,以上三种方式均可实现MySQL表的垂直切分。
主要思路是提取”热点“字段到单独表中,减少表大小。
并通过公共列或子查询进行关联,获取完整的数据。