【Python性能分析】Mysql涯塔、Pandas、Python列表豌注,三者的查詢性能誰(shuí)強(qiáng)誰(shuí)弱伤塌?

原文地址?https://www.cyberlight.xyz/passage/data-analyse-performance

這篇筆記測(cè)試Mysql、Pandas轧铁、Python列表的大數(shù)據(jù)查詢性能每聪。

手中有一張72萬(wàn)余行的數(shù)據(jù)庫(kù)表,借此機(jī)會(huì)測(cè)試三者的數(shù)據(jù)查詢性能齿风,終于解決內(nèi)心疑問(wèn)药薯。


測(cè)試環(huán)境:Ubuntu 20.04 LTS, Python 3.8.2,?Intel? Core? i7-8750H CPU @ 2.20GHz × 12

原數(shù)據(jù)有8列,724100行救斑,sql文件大小 65.5 MB

數(shù)據(jù)表第8列為時(shí)間童本,下面用三種方法分別按時(shí)間降序,記錄每種方法的用時(shí)(每種方法測(cè)試3次脸候,取平均值)


一穷娱、Mysql

1.測(cè)試性能,通過(guò)Python調(diào)用Mysql

以下為測(cè)試源碼

import pandas as pd

import mysql.connector

import datetime

def connect():

? ? mydb = mysql.connector.connect(

? ? ? host="127.0.0.1",

? ? ? user="root",

? ? ? passwd="sdddddddd",

? ? ? database="abc"

? ? )

? ? return mydb

def sql():

? ? mydb = connect()?

? ? mycursor = mydb.cursor()

? ? start = datetime.datetime.now()

? ? mycursor.execute("SELECT * FROM My_table ORDER BY time DESC") #按time列降序

? ? end = datetime.datetime.now()

? ? print(end - start) #測(cè)試Mysql查詢性能


? ? data_sql = mycursor.fetchall()

? ? mycursor.close()

? ? mydb.close()

? ? return data_sql

def main():

? ? data_sql = sql()

if __name__ == "__main__":

? ? main()

測(cè)試結(jié)果如圖

三次取平均值為 0.652s

這只是Python調(diào)用Mysql的性能运沦,這和Mysql的真實(shí)性能有不同嗎泵额?為了避免Python產(chǎn)生的誤差,接著再測(cè)試一組直接用Mysql查詢的性能携添。

2嫁盲、測(cè)試性能,直接通過(guò)Mysql查詢

輸入如下命令排序查詢

SELECT * FROM My_table ORDER BY time DESC

首次測(cè)試得到的時(shí)間如圖

測(cè)試3次的時(shí)間分別為 0.668s烈掠、0.664s羞秤、0.702s,平均值 0.678s

由此得出左敌,Python調(diào)用Mysql 和 直接使用Mysql查詢瘾蛋,性能幾乎一致,可忽略不計(jì)矫限。


二瘦黑、Pandas

以下為Pandas的測(cè)試源碼

import pandas as pd

import mysql.connector

import datetime

def connect():

? ? mydb = mysql.connector.connect(

? ? ? host="127.0.0.1",

? ? ? user="root",

? ? ? passwd="sdddddddd",

? ? ? database="abc"

? ? )

? ? return mydb

def pa():

? ? mydb = connect()

? ? mycursor = mydb.cursor()


? ? mycursor.execute("SELECT * FROM eb7_today")

? ? data_sql = mycursor.fetchall()

? ? data = pd.DataFrame(data_sql, columns=['1', '2', '3', '4', '5', '6', '7', 'time'])

? ? start = datetime.datetime.now()

? ? data.sort_values('time', ascending=False, inplace = True) #按time列降序

? ? end = datetime.datetime.now()

? ? print(end - start) #測(cè)試Pandas排序時(shí)間

? ? mycursor.close()

? ? mydb.close()

? ? return data

def main():

? ? data = pa()

if __name__ == "__main__":

? ? main()

下面為測(cè)試結(jié)果

三次取平均值為 0.433s


三京革、Python列表

以下為Python列表的測(cè)試源碼

import pandas as pd

import mysql.connector

import datetime

def connect():

? ? mydb = mysql.connector.connect(

? ? ? host="127.0.0.1",

? ? ? user="root",

? ? ? passwd="sdddddddd",

? ? ? database="abc"

? ? )

? ? return mydb

def py():

? ? mydb = connect()

? ? mycursor = mydb.cursor()


? ? mycursor.execute("SELECT * FROM My_table")

? ? data_sql = mycursor.fetchall()

? ? start = datetime.datetime.now()

? ? data_sql.sort(key=lambda x:x[7], reverse=True) #按第8列降序(time列)

? ? end = datetime.datetime.now()

? ? print(end - start) #測(cè)試Python列表的查詢性能

? ? mycursor.close()

? ? mydb.close()

? ? return data_sql

def main():

? ? data_sql = py()

if __name__ == "__main__":

? ? main()

測(cè)試結(jié)果如下

三次取平均值為 0.064s


四、總結(jié)

1.在Python中調(diào)用Mysql 和 直接使用Mysql查詢幸斥,性能幾乎一致匹摇,可忽略不計(jì)。

2.大數(shù)據(jù)查詢性能 Python列表 > Pandas > Mysql

測(cè)試數(shù)據(jù)為甲葬,Mysql查詢時(shí)間? 0.652s廊勃,Pandas查詢時(shí)間?0.433s,Python列表查詢時(shí)間?0.064s


看來(lái)Python大數(shù)據(jù)分析性能很強(qiáng)的~

這里想到一個(gè)問(wèn)題经窖,Pandas 基于?NumPy 開(kāi)發(fā)坡垫,內(nèi)部實(shí)現(xiàn)由C語(yǔ)言完成,理論性能應(yīng)該極強(qiáng)画侣,為什么測(cè)試中Python列表性能反而強(qiáng)于Pandas冰悠?(大概強(qiáng)5倍)希望知道的朋友留言,謝謝配乱!共同進(jìn)步~

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末溉卓,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子搬泥,更是在濱河造成了極大的恐慌桑寨,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,204評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件忿檩,死亡現(xiàn)場(chǎng)離奇詭異尉尾,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)燥透,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門沙咏,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人班套,你說(shuō)我怎么就攤上這事肢藐。” “怎么了孽尽?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,548評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵窖壕,是天一觀的道長(zhǎng)忧勿。 經(jīng)常有香客問(wèn)我杉女,道長(zhǎng),這世上最難降的妖魔是什么鸳吸? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,657評(píng)論 1 293
  • 正文 為了忘掉前任熏挎,我火速辦了婚禮,結(jié)果婚禮上晌砾,老公的妹妹穿的比我還像新娘坎拐。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,689評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布哼勇。 她就那樣靜靜地躺著都伪,像睡著了一般。 火紅的嫁衣襯著肌膚如雪积担。 梳的紋絲不亂的頭發(fā)上陨晶,一...
    開(kāi)封第一講書(shū)人閱讀 51,554評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音帝璧,去河邊找鬼先誉。 笑死,一個(gè)胖子當(dāng)著我的面吹牛的烁,可吹牛的內(nèi)容都是我干的褐耳。 我是一名探鬼主播,決...
    沈念sama閱讀 40,302評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼渴庆,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼铃芦!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起把曼,我...
    開(kāi)封第一講書(shū)人閱讀 39,216評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤杨帽,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后嗤军,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體注盈,經(jīng)...
    沈念sama閱讀 45,661評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,851評(píng)論 3 336
  • 正文 我和宋清朗相戀三年叙赚,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了老客。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,977評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡震叮,死狀恐怖胧砰,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情苇瓣,我是刑警寧澤尉间,帶...
    沈念sama閱讀 35,697評(píng)論 5 347
  • 正文 年R本政府宣布,位于F島的核電站击罪,受9級(jí)特大地震影響哲嘲,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜媳禁,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,306評(píng)論 3 330
  • 文/蒙蒙 一眠副、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧竣稽,春花似錦囱怕、人聲如沸霍弹。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,898評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)典格。三九已至,卻和暖如春台丛,著一層夾襖步出監(jiān)牢的瞬間钝计,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,019評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工齐佳, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留私恬,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,138評(píng)論 3 370
  • 正文 我出身青樓炼吴,卻偏偏與公主長(zhǎng)得像本鸣,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子硅蹦,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,927評(píng)論 2 355