首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL InnoDB 寫入效能實測:索引與提交頻率的影響量化分析

     編輯:MySQL 綜合教學

MySQL InnoDB 寫入效能實測:索引與提交頻率的影響量化分析

測試環境與方法

  • 表結構:id PK, c1, c2, c3, c4 VARCHAR(200)
  • 存儲過程批量插入 30 萬行,控制提交頻率
  • 對比:無索引 vs 自增 PK vs 自增 PK + 二級索引

結論一:索引對寫入速度的影響

索引配置 相對無索引效能
自增主鍵 +3.11%(提升)
自增主鍵 + 二級索引 -27.37%(下降)

💡 **InnoDB 表務必有自增主鍵**,順序寫入極大提升插入效能;二級索引會帶來維護成本,按需建立。


結論二:提交頻率對寫入速度的影響(30 萬行,有自增 PK)

提交頻率 相對一次性提交 耗時倍數
一次性提交(最後 commit) 基準 1.00x
每 10 萬行 -1.17% 1.01x
每 1 萬行 -3.01% 1.03x
每 1 千行 -23.38% 1.23x
每 100 行 -24.44% 1.24x
每 10 行 -92.78% 1.93x
每 1 行(自動提交) -546.78% 6.47x

提交頻率效能對比圖


場景化建議

場景 建議策略
批量資料導入(非高併發) **批量提交**,或僅最後提交一次
高併發線上業務 **盡快提交**,避免鎖範圍擴大、阻塞其他事務
mysqldump 導入 必須啟用 --extended-insert,否則慢 5 倍以上

測試存儲過程核心碼

CREATE PROCEDURE insert_mytab(IN rownum INT, IN commitrate INT)
BEGIN
  DECLARE i INT DEFAULT 0;
  SET AUTOCOMMIT = 0;
  WHILE i < rownum DO
    INSERT INTO mytab(c1,c2,c3,c4) VALUES(
      FLOOR(RAND()*rownum), FLOOR(RAND()*rownum), NOW(),
      REPEAT(CHAR(ROUND(RAND()*255)), 200)
    );
    SET i = i + 1;
    IF commitrate > 0 AND i % commitrate = 0 THEN
      COMMIT;
    END IF;
  END WHILE;
  COMMIT;  -- 最後統一提交
END

💡 核心心法:索引是雙面刃,讀快寫慢;提交頻率是效能與併發的平衡點,**批量場景大事務,線上場景小事務**。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved