前言
由于近期有個項目對系統性能要求很高,技術選型上由于種種原因已經確定使用Mysql數據庫,接下來就是要確定到底使用哪種存儲引擎。我們的應用是典型的寫多讀少,寫入內容為也很短,對系統的穩定性要求很高。所以存儲引擎肯定就定在廣泛使用的Innodb和MyISAM之中了。
至于兩者的比較網上也有很多,但是畢竟這個事情也不復雜,決定還是自己來做,去驗證一下在我們的場景下誰更優。
本文測試所用工具版本如下:
Tools | Version |
---|---|
MySQL | 5.7.18 |
Python | 3.6 |
Pandas | 0.23 |
① 創建數據表
首先我們需要把兩張使用了不同引擎的表創建出來,使用為了方便起見,我們直接使用Navicat創建了兩張 員工信息表,具體字段如下:
使用InnoDB引擎的表,設計表名為innodb,選項如下:
使用InnoDB引擎的表,設計表名為myisam,選項如下:
因為是簡單操作,創建的具體細節就不詳述了,至此,我們的數據庫就把使用 InnoDB 和 MyISAM 兩種引擎的表創建好了。
② 單線程寫入性能對比
1. InnoDB 引擎
執行以下代碼,往使用了InnoDB引擎的表格插入1000條數據
import pandas as pdfrom sqlalchemy import create_engineimport timedb = create_engine('mysql+pymysql://mysql:[email protected]:3306/test')start = time.time()for i in range(1000): data = {'index': i, 'name': 'name_' + str(i), 'age': i, 'salary': i, 'level': i} df = pd.DataFrame(data, index=[0]) df.to_sql('innodb', db, if_exists='append', index=False)end = time.time()print(end - start)
執行3次上面的代碼,得到程序寫入1000條數據的時間分別為:12.58s、14.10s、12.71s,平均寫入時間為 13.13s。
2. MyISAM 引擎
執行以下代碼,往使用了MyISAM引擎的表格插入1000條數據
import pandas as pdfrom sqlalchemy import create_engineimport timedb = create_engine('mysql+pymysql://mysql:[email protected]:3306/test')start = time.time()for i in range(1000): data = {'index': i, 'name': 'name_' + str(i), 'age': i, 'salary': i, 'level': i} df = pd.DataFrame(data, index=[0]) df.to_sql('myisam', db, if_exists='append', index=False)end = time.time()print(end - start)
執行3次上面的代碼,得到程序寫入1000條數據的時間分別為:6.64s、6.99s、7.29s,平均寫入時間為 6.97s。
新聞熱點
疑難解答