1. 程式人生 > >MySQL MyISAM與InnoDB效能對比

MySQL MyISAM與InnoDB效能對比

MySQL常用的儲存引擎是MyISAM與InnoDB,區別如下:

  • MyISAM不支援事務,InnoDB支援
  • MyISAM支援表鎖,InnoDB支援行鎖
  • MyISAM不支援外來鍵,InnoDB支援
  • MyISAM支援全文索引
  • MyISAM批量插入效能高,InnoDB批量插入效能低

對於業務上,在DB表中插入一個帖子、一個訂單等的情況較多,對於MySQL兩種不同MyISAM的儲存引擎的插入效能和查詢效能進行簡單對比,對於不同業務規模進行一個簡單參考。

環境:

  • 雙核筆記本,記憶體4GB
  • MYSQL 5.7 docker 安裝
  • 客戶端與資料庫安裝在同一臺機器上

實現方案:

  • 插入文字,大約200B,主鍵自增
  • 根據主鍵索引,隨機查詢

實驗結果如下:

                               MyISAM
1執行緒 插入 10w行 14.18s 7052 line/s
10執行緒 插入 100w行 65.82s 15193 line/s
100執行緒 插入 1000w行 718.37s 13920 line/s
                              InnoDB
1執行緒 插入 10w行

823.7s

121.4 line/s
10執行緒 插入 10w行 164.75s 607.0 line/s
100執行緒 插入 10w行 16.83s 5941 line/s
                               MyISAM
1執行緒 查詢 10w行 53.56s 1867 line/s
10執行緒 查詢 100w行 114.83s 8708 line/s
100執行緒 查詢 1000w行 971s 10299 line/s
                               InnoDB
1執行緒 查詢 10w行 29.97s 3336 line/s
10執行緒 查詢 10w行 11s 9090 line/s
100執行緒 查詢 10w行 10.52s 9505 line/s

結論:

  1. MyISAM插入效能在 15000 line/s InnoDB 插入效能在 6000 line/s
  2. MyISAM隨機讀主鍵索引 10000 line/s  InnoDB隨機讀在 9000+ line/s
  3. 從MyISAM與InnoDB隨機查詢和插入效能來看,可以支援大部分業務中小業務,一般不必考慮分庫、分表、快取等方案
  4. 無特殊要求,線上業務不要使用MyISAM,全部使用InnoDB,如果InnoDB的效能無法滿足要求,那應該考慮分庫、分表或快取方案。
  5. 如果業務涉及較多的更新、刪除操作,更應該使用InnoDB,應為InnoDB支援行鎖,有更高的併發效能。