最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2018年09月18日 09:19:30   作者:ChrisYZX  
網(wǎng)上有很多評論myisam和innodb讀寫性能對比,所以下面這篇文章主要給大家介紹了關(guān)于使用Python如何測試InnoDB與MyISAM讀寫性能的相關(guān)資料,文中通過圖文介紹的非常詳細,需要的朋友可以參考下

前言

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

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

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

Tools Version
MySQL 5.7.18
Python 3.6
Pandas 0.23

① 創(chuàng)建數(shù)據(jù)表

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

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

 

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

 

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

② 單線程寫入性能對比

1. InnoDB 引擎

執(zhí)行以下代碼,往使用了InnoDB引擎的表格插入1000條數(shù)據(jù)

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)

執(zhí)行3次上面的代碼,得到程序?qū)懭?000條數(shù)據(jù)的時間分別為:12.58s、14.10s、12.71s,平均寫入時間為 13.13s。

2. MyISAM 引擎

執(zhí)行以下代碼,往使用了MyISAM引擎的表格插入1000條數(shù)據(jù)

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)

執(zhí)行3次上面的代碼,得到程序?qū)懭?000條數(shù)據(jù)的時間分別為:6.64s、6.99s、7.29s,平均寫入時間為 6.97s。

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

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

③ 多線程寫入性能對比

1. InnoDB 引擎

執(zhí)行以下代碼,往使用了InnoDB引擎的表格插入1000條數(shù)據(jù)

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)

執(zhí)行3次上面的代碼,得到程序?qū)懭?000條數(shù)據(jù)的時間分別為:4.98s、4.84s、4.88s,平均寫入時間為 4.9s。

2. MyISAM 引擎

執(zhí)行以下代碼,往使用了MyISAM引擎的表格插入1000條數(shù)據(jù)

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)

執(zhí)行3次上面的代碼,得到程序?qū)懭?000條數(shù)據(jù)的時間分別為:3.29s、3.62s、3.47s,平均寫入時間為 3.46s。

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

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

④ 讀取性能對比

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

1. InnoDB 引擎

執(zhí)行以下代碼,讀取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)

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

2. MyISAM 引擎

執(zhí)行以下代碼,讀取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)

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

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

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

⑤ 總結(jié)

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

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

好了,以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

相關(guān)文章

  • python Pexpect 實現(xiàn)輸密碼 scp 拷貝的方法

    python Pexpect 實現(xiàn)輸密碼 scp 拷貝的方法

    今天小編就為大家分享一篇python Pexpect 實現(xiàn)輸密碼 scp 拷貝的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-01-01
  • Pygame出現(xiàn)播放背景音樂卡頓的問題分析及解決(發(fā)生在win10更新至win11后)

    Pygame出現(xiàn)播放背景音樂卡頓的問題分析及解決(發(fā)生在win10更新至win11后)

    Pygame是常用的游戲開發(fā)庫之一,然而在使用Pygame的過程中,卻出現(xiàn)了播放背景音樂卡頓的問題,表現(xiàn)為咯咯咯的噪音,所以本文記錄了Pygame出現(xiàn)播放背景音樂卡頓的問題分析及解決,需要的朋友可以參考下
    2024-02-02
  • Python tkinter padx參數(shù)詳解

    Python tkinter padx參數(shù)詳解

    這篇文章主要介紹了tkinter padx參數(shù),幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下,希望能夠給你帶來幫助
    2021-10-10
  • keras中的loss、optimizer、metrics用法

    keras中的loss、optimizer、metrics用法

    這篇文章主要介紹了keras中的loss、optimizer、metrics用法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-06-06
  • python使用psutil模塊獲取系統(tǒng)狀態(tài)

    python使用psutil模塊獲取系統(tǒng)狀態(tài)

    作為程序猿,大家可能都熟悉linux系統(tǒng)的基礎(chǔ)信息獲取方法都是通過shell來獲取,但是在python中,我們還可以使用psutil模塊來獲取系統(tǒng)信息。psutil模塊把shell查看系統(tǒng)基礎(chǔ)信息的功能都包裝了下,使用更加簡單,功能豐富。
    2016-08-08
  • OpenCV3.0+Python3.6實現(xiàn)特定顏色的物體追蹤

    OpenCV3.0+Python3.6實現(xiàn)特定顏色的物體追蹤

    這篇文章主要為大家詳細介紹了OpenCV3.0+Python3.6實現(xiàn)特定顏色的物體追蹤,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-07-07
  • django中的setting最佳配置小結(jié)

    django中的setting最佳配置小結(jié)

    setting配置也經(jīng)常將一些配置混淆今天主要是介紹django中的setting最佳配置小結(jié),需要的朋友參考下吧
    2017-11-11
  • 深入淺析Python中join 和 split詳解(推薦)

    深入淺析Python中join 和 split詳解(推薦)

    這篇文章主要介紹了Python中join 和 split詳解的相關(guān)資料,本文還通過一個示例給大家介紹python join 和 split方法 的使用,需要的朋友可以參考下
    2016-06-06
  • Python用5行代碼寫一個自定義簡單二維碼

    Python用5行代碼寫一個自定義簡單二維碼

    今天小編就為大家分享一篇關(guān)于Python用5行代碼寫一個自定義簡單二維碼的文章,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-10-10
  • Python調(diào)用釘釘自定義機器人的實現(xiàn)

    Python調(diào)用釘釘自定義機器人的實現(xiàn)

    這篇文章主要介紹了Python調(diào)用釘釘自定義機器人的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-01-01

最新評論

隆德县| 惠安县| 仲巴县| 霸州市| 邳州市| 黑龙江省| 太和县| 安庆市| 宁津县| 吉首市| 凤阳县| 花莲县| 武隆县| 康平县| 米泉市| 沂南县| 海淀区| 云林县| 新郑市| 句容市| 图片| 新蔡县| 赤峰市| 凯里市| 阿拉善右旗| 南乐县| 靖边县| 常熟市| 合江县| 油尖旺区| 禹州市| 壤塘县| 禄劝| 芦溪县| 子长县| 满洲里市| 靖远县| 舟山市| 金沙县| 策勒县| 廊坊市|