MySQL MyISAM與InnoDB效能對比
阿新 • • 發佈:2018-12-10
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 |
結論:
- MyISAM插入效能在 15000 line/s InnoDB 插入效能在 6000 line/s
- MyISAM隨機讀主鍵索引 10000 line/s InnoDB隨機讀在 9000+ line/s
- 從MyISAM與InnoDB隨機查詢和插入效能來看,可以支援大部分業務中小業務,一般不必考慮分庫、分表、快取等方案
- 無特殊要求,線上業務不要使用MyISAM,全部使用InnoDB,如果InnoDB的效能無法滿足要求,那應該考慮分庫、分表或快取方案。
- 如果業務涉及較多的更新、刪除操作,更應該使用InnoDB,應為InnoDB支援行鎖,有更高的併發效能。