MENU

MySQL分库分表之Merge引擎

June 15, 2017 • MySQL

对于Merge引擎来说,分表必须要是MyISAM引擎才可以。使用Merge引擎来分表特别适合一些日志消息的记录。比如每月一张日志表或者日志量不大爷可以按年来分。

建立数据库

建立分表

建立总表

CREATE TABLE t1 (id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,  message VARCHAR(200));
CREATE TABLE t2 (id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,  message VARCHAR(200));

CREATE TABLE t (
    id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    message VARCHAR(200)
)     ENGINE=MERGE  UNION=(t1,t2) INSERT_METHOD=LAST;

在这里需要说明的是,t1表和t2表以及t表的表结构要是一样的,所以当t2表如果数据量已经很大了,在加入一张t3表的话需要这样操作

CREATE TABLE t3 (id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,  message VARCHAR(200));

ALTER TABLE t UNION=(t1,t2,t3);

INSERT_METHOD详解

INSERT_METHOD选项可用于指定插入数据的方式,有以下三种取值:

  • NO

不允许通过总表插入数据,否则执行SQL会报错。例如,执行以下SQL语句,将总表的INSERT_METHOD修改为NO,然后通过总表插入一条数据:

  • FIRST

允许通过总表插入数据,数据存储在MRG文件列出的第一个分表之中。例如,执行以下SQL语句,将总表的INSERT_METHOD修改为FIRST,然后通过总表插入一条数据:

  • LAST

允许通过总表插入数据,数据存储在MRG文件列出的最后一个分表之中。例如,执行以下SQL语句,将总表的INSERT_METHOD修改为LAST,然后通过总表插入一条数据: