合並表(ENGINE=MRG_MyISAM)將**結構完全相同的多個 MyISAM 表**聚合為一個虛擬表,查詢時按 UNION 列表順序依次訪問子表。
CREATE TABLE t3 (a INT PRIMARY KEY) ENGINE=MyISAM;
CREATE TABLE t4 (a INT PRIMARY KEY) ENGINE=MyISAM;
CREATE TABLE mrg (a INT PRIMARY KEY) ENGINE=MRG_MyISAM
UNION=(t3,t4) INSERT_METHOD=LAST;
INSERT_METHOD:FIRST(插入第一張子表)、LAST(最後一張)、NO(禁止插入)。INSERT INTO t3 VALUES (1),(2);
INSERT INTO t4 VALUES (2),(3),(4);
SELECT * FROM mrg;
+---+
| a |
+---+
| 1 |
| 2 |
| 2 | -- 重複值!合並表**不保證主鍵唯一**
| 3 |
| 4 |
+---+
即使子表各自主鍵唯一,合並表**不強制全局唯一**,查詢到第一個匹配行即返回(LIMIT 1 時尤顯)。
DROP TABLE mrg; — 僅刪除 .frm/.MRG 定義文件,**子表 t3/t4 完好無損**,可繼續獨立訪問。DROP TABLE t3; — 子表刪除後,**合並表 mrg 查詢報錯**:ERROR 1168: Unable to open underlying table。| 優點 | 缺點/限制 |
|---|---|
| 邏輯分表(如按月/地區),應用層無感查詢全量 | 僅支援 MyISAM 子表 |
| 避免大表單表性能瓶頸 | 不支援主鍵/唯一鍵全局約束 |
| 單獨備份/歸檔子表極簡單 | 無法建立外鍵、觸發器 |
| 可用 REPLACE/INSERT_METHOD 控制寫入路由 | 5.7+ 推薦用分區表替代 |