首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 存儲引擎選型:InnoDB vs MyISAM 核心差異與遷移指南

     編輯:MySQL 資料庫相關知識

    核心差異對照

    特性InnoDBMyISAM
    事務支援✅ ACID、行級鎖、MVCC❌ 無事務、表級鎖
    外鍵約束✅ 支援❌ 不支援
    崩潰恢復✅ Redo/Undo Log 自動恢復❌ 需手工 REPAIR TABLE
    並發寫入高 (行鎖)低 (表鎖)
    全文索引5.6+ 支援✅ 早期優勢
    壓縮表頁面壓縮、Transparent Page Compression✅ myisampack 只讀壓縮
    資料檔可移植性需同版本/參數✅ .MYD/.MYI 跨 OS 直接複製
    預設引擎5.5+ 預設5.5 前預設

    選型決策樹

    1. 需要事務/外鍵/高並發寫入 → InnoDB
    2. 純讀多寫少、需全文索引 (5.6 前)、跨 OS 複製檔案 → MyISAM
    3. 日誌/歸檔/唯寫少讀、極致壓縮 → ARCHIVE
    4. 記憶體表、極速查找 → MEMORY

    引擎遷移操作

    -- 單表
    ALTER TABLE tbl_name ENGINE = InnoDB;
    
    -- 全庫批量 (配合 48465 存儲過程)
    CALL change_all_engine('db_name', 'InnoDB');

    遷移避坑指南

    • 外鍵:遷移前 SET FOREIGN_KEY_CHECKS=0,遷移後 =1
    • 自增主鍵:MyISAM 允許複合主鍵自增第二列,InnoDB 僅支援單列自增 → 需重設計
    • 全文索引:5.6 前 MyISAM 遷移到 InnoDB 需重建 FULLTEXT 索引
    • 鎖行為變化:表鎖→行鎖,死鎖機率變化,需壓測驗證
    • 備份方式:InnoDB 推薦 xtrabackup 熱備,MyISAM 需鎖表或 mysqlhotcopy

    InnoDB 獨有效能參數

    [mysqld]
    innodb_buffer_pool_size = 4G        # 核心快取,設物理記憶體 60-80%
    innodb_log_file_size = 1G           # 大事務日誌減少 checkpoint
    innodb_flush_log_at_trx_commit = 2  # 1=最安全,2=每秒刷盤 (高效能)
    innodb_file_per_table = ON          # 獨立 .ibd 方便管理
    innodb_read_io_threads = 8
    innodb_write_io_threads = 8
    1. 上一篇文章:
    2. 下一篇文章:
    Copyright © 程式碼之家 All Rights Reserved