中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

使用Python如何測試InnoDB與MyISAM的讀寫性能

發布時間:2020-09-13 01:02:46 來源:腳本之家 閱讀:120 作者:ChrisYZX 欄目:開發技術

前言

由于近期有個項目對系統性能要求很高,技術選型上由于種種原因已經確定使用Mysql數據庫,接下來就是要確定到底使用哪種存儲引擎。我們的應用是典型的寫多讀少,寫入內容為也很短,對系統的穩定性要求很高。所以存儲引擎肯定就定在廣泛使用的Innodb和MyISAM之中了。

至于兩者的比較網上也有很多,但是畢竟這個事情也不復雜,決定還是自己來做,去驗證一下在我們的場景下誰更優。

本文測試所用工具版本如下:

Tools Version
MySQL 5.7.18
Python 3.6
Pandas 0.23

① 創建數據表

首先我們需要把兩張使用了不同引擎的表創建出來,使用為了方便起見,我們直接使用Navicat創建了兩張 員工信息表,具體字段如下:

使用Python如何測試InnoDB與MyISAM的讀寫性能

使用InnoDB引擎的表,設計表名為innodb,選項如下:

 使用Python如何測試InnoDB與MyISAM的讀寫性能

使用InnoDB引擎的表,設計表名為myisam,選項如下:

使用Python如何測試InnoDB與MyISAM的讀寫性能 

因為是簡單操作,創建的具體細節就不詳述了,至此,我們的數據庫就把使用 InnoDB 和 MyISAM 兩種引擎的表創建好了。

② 單線程寫入性能對比

1. InnoDB 引擎

執行以下代碼,往使用了InnoDB引擎的表格插入1000條數據

import pandas as pd
from sqlalchemy import create_engine
import time

db = create_engine('mysql+pymysql://mysql:123456@127.0.0.1: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 pd
from sqlalchemy import create_engine
import time

db = create_engine('mysql+pymysql://mysql:123456@127.0.0.1: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。

兩種引擎的單線程寫入速度對比如下:

使用Python如何測試InnoDB與MyISAM的讀寫性能

結論:單線程的情況下,MyISAM引擎的寫入速度比InnoDB引擎的寫入速度快88%

③ 多線程寫入性能對比

1. InnoDB 引擎

執行以下代碼,往使用了InnoDB引擎的表格插入1000條數據

import pandas as pd
from sqlalchemy import create_engine
import time
from concurrent.futures import ThreadPoolExecutor

db = create_engine('mysql+pymysql://mysql:123456@127.0.0.1:3306/test')
start = time.time()

data_lst = [{'index': i,
    'name': 'name_' + str(i),
    'age': i,
    'salary': i,
    'level': i} for i in range(1000)]

def write(data):
 df = pd.DataFrame(data, index=[0])
 df.to_sql('innodb', db, if_exists='append', index=False)

def execute():
 with ThreadPoolExecutor(max_workers=5) as executor:
  executor.map(write, data_lst)

execute()

end = time.time()
print(end - start)

執行3次上面的代碼,得到程序寫入1000條數據的時間分別為:4.98s、4.84s、4.88s,平均寫入時間為 4.9s。

2. MyISAM 引擎

執行以下代碼,往使用了MyISAM引擎的表格插入1000條數據

import pandas as pd
from sqlalchemy import create_engine
import time
from concurrent.futures import ThreadPoolExecutor

db = create_engine('mysql+pymysql://mysql:123456@127.0.0.1:3306/test')
start = time.time()

data_lst = [{'index': i,
    'name': 'name_' + str(i),
    'age': i,
    'salary': i,
    'level': i} for i in range(1000)]

def write(data):
 df = pd.DataFrame(data, index=[0])
 df.to_sql('myisam', db, if_exists='append', index=False)

def execute():
 with ThreadPoolExecutor(max_workers=5) as executor:
  executor.map(write, data_lst)

execute()

end = time.time()
print(end - start)

執行3次上面的代碼,得到程序寫入1000條數據的時間分別為:3.29s、3.62s、3.47s,平均寫入時間為 3.46s。

兩種引擎的多線程寫入速度對比如下:

使用Python如何測試InnoDB與MyISAM的讀寫性能

結論:多線程的情況下,MyISAM引擎的寫入速度比InnoDB引擎的寫入速度快42%

④ 讀取性能對比

為了獲得數據量較大的表用于測試數據庫的讀取性能,我們循環執行10遍上面多線程寫入數據的操作,得到兩張數據量為10000條數據的表格,然后讀取10遍該表格,獲取讀取時間

1. InnoDB 引擎

執行以下代碼,讀取10遍使用了InnoDB引擎的表格

import pandas as pd
from sqlalchemy import create_engine
import time

db = create_engine('mysql+pymysql://mysql:123456@127.0.0.1:3306/test')
start = time.time()

for _ in range(10):
 df = pd.read_sql('innodb', db)

end = time.time()
print(end - start)

執行3次上面的代碼,得到程序10次讀取10000條數據的時間分別為:28.94s、28.88s、28.48s,平均寫入時間為 28.77s。

2. MyISAM 引擎

執行以下代碼,讀取10遍使用了MyISAM引擎的表格

import pandas as pd
from sqlalchemy import create_engine
import time

db = create_engine('mysql+pymysql://mysql:123456@127.0.0.1:3306/test')
start = time.time()

for _ in range(10):
 df = pd.read_sql('innodb', db)

end = time.time()
print(end - start)

執行3次上面的代碼,得到程序10次讀取10000條數據的時間分別為:28.51s、29.12s、28.76s,平均寫入時間為 28.8s。

兩種引擎的讀取速度對比如下:

使用Python如何測試InnoDB與MyISAM的讀寫性能

結論:MyISAM引擎和InnoDB引擎的讀取速度無明顯差異

⑤ 總結

1. 寫入速度,MyISAM比InnoDB快,單線程的情況下,兩者差異尤為明顯

2. 讀取速度,InnoDB和MyISAM無明顯差異

好了,以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對億速云的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

淳安县| 富裕县| 万源市| 崇文区| 郎溪县| 乌恰县| 巴林左旗| 灵宝市| 印江| 建昌县| 金昌市| 新沂市| 汉川市| 安义县| 高清| 耒阳市| 嘉定区| 和静县| 九龙县| 利津县| 黔西| 高青县| 昌吉市| 涟水县| 邛崃市| 临安市| 高邮市| 灵川县| 福泉市| 蓝田县| 方山县| 苍山县| 宁乡县| 宁远县| 全州县| 保康县| 鄢陵县| 济阳县| 林州市| 平湖市| 个旧市|