萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 程式設計 >  >> 資料庫 >> 資料庫綜合

MySQL MERGE 儲存引擎詳解:將多個 MyISAM 表合併查詢

什麼是 MERGE 引擎?

MERGE 引擎(又稱 MRG_MyISAM)允許將多個結構完全相同的 MyISAM 表在邏輯上合併為一個虛擬表,查詢時如同操作單一表格,極適合日誌分表、歷史資料歸檔等場景。

適用場景與限制

  • 適用: 每日/每週/每月建立獨立日誌表,需跨期間彙總查詢。
  • 限制: 僅支援 MyISAM 表;所有參與表的結構(欄位名、順序、型別、索引)必須完全一致;所有表需屬於同一資料庫。

建立範例

步驟 1:建立基礎表(MyISAM)

CREATE TABLE TEST_MERGE_1 (
    ID INT(5) NOT NULL,
    VALUE VARCHAR(100) NOT NULL,
    PRIMARY KEY (ID)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

CREATE TABLE TEST_MERGE_2 (
    ID INT(5) NOT NULL,
    VALUE VARCHAR(100) NOT NULL,
    PRIMARY KEY (ID)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

步驟 2:建立 MERGE 表

CREATE TABLE TEST_MERGE (
    ID INT(5) NOT NULL,
    VALUE VARCHAR(100) NOT NULL,
    PRIMARY KEY (ID)
) ENGINE=MRG_MyISAM DEFAULT CHARSET=utf8
INSERT_METHOD=LAST
UNION=(TEST_MERGE_1, TEST_MERGE_2);

關鍵參數說明

參數說明
ENGINE=MRG_MyISAM指定儲存引擎為 MERGE
INSERT_METHOD0=不允許插入;FIRST=插入第一個 UNION 表;LAST=插入最後一個 UNION 表(預設)
UNION=(...)列出要合併的基礎表名稱,順序影響 INSERT_METHOD 行為

重要特性與注意事項

  1. 類似 SQL UNION:查詢時自動合併結果集。
  2. 結構必須一致:含欄位順序、索引定義。
  3. 基礎表異動即時反映:對基礎表的 INSERT/UPDATE/DELETE 立即可透過 MERGE 表查詢到。
  4. 可直接編輯 .MRG 檔:修改 UNION 表清單後需執行 FLUSH TABLES 重新載入。
  5. 約束由基礎表控制:MERGE 表定義的 PRIMARY KEY/UNIQUE 無實際約束力,若基礎表有重複鍵值,MERGE 表查詢會出現重複列。

檔案結構

  • .frm:表結構定義
  • .MRG:UNION 表名稱清單(每行一個表名)

結語

MERGE 引擎為 MyISAM 分表查詢提供極佳便利性,但在 InnoDB 支援分區表(Partitioning)的現代版本中,分區表通常是更優選擇(支援交易、外鍵、行鎖)。視專案需求評估採用。

copyright © 萬盛學電腦網 all rights reserved