原文地址本篇笔记测试了Mysql、Pandas、Python列表的大数据查询性能。我手上有一个72万多行的数据库表。借此机会测试了三者的数据查询性能,终于解决了内心的疑惑。测试环境:Ubuntu20.04LTS,Python3.8.2,Intel?Core?i7-8750HCPU@2.20GHz×12原始数据有8列,724,100行,sql文件大小为65.5MB。数据表第8列为时间,下面用到的三种方法按时间从大到小排序,记录每种方法的时间(每种方法测试3次,取平均值)1.Mysql1.测试性能,通过Python调用Mysql以下为测试源码importpandasaspdimportmysql.connectorimportdatetimedefconnect():mydb=mysql.connector.connect(host="127.0.0.1",user="root",passwd="sdddddddd",database="abc")returnmydbdefsql():mydb=connect()mycursor=mydb.cursor()start=datetime.datetime.now()mycursor.execute("SELECT*FROMMy_tableORDERBYtimeDESC")#按照时间列降序end=datetime.datetime.now()print(end-start)#测试Mysql查询性能data_sql=mycursor.fetchall()mycursor.close()mydb.close()returndata_sqldefmain():data_sql=sql()if__name__=="__main__":main()测试结果如图所示,三次平均为0.652s,正好是Python调用Mysql的性能。这和Mysql的真实性能有区别吗?为了避免Python带来的错误,我们接着直接使用Mysql测试了一组查询的性能。2、测试性能,直接通过Mysql查询输入如下命令排序查询SELECT*FROMMy_tableORDERBYtimeDESC。从第一次测试获得的时间如图所示。3次测试时间分别为0.668s、0.664s、0.702s,平均值为0.678s。可以得出结论,Python调用Mysql和直接使用Mysql查询性能相差无几,可以忽略不计。2.Pandas下面是Pandas的测试源码importpandasaspdimportmysql.connectorimportdatetimedefconnect():mydb=mysql.connector.connect(host="127.0.0.1",user="root",passwd="sdddddddd",database="abc")返回mydbdefpa():mydb=connect()mycursor=mydb.cursor()mycursor.execute("SELECT*FROMeb7_today")data_sql=mycursor.fetchall()data=pd.DataFrame(data_sql,columns=['1','2','3','4','5','6','7','time'])start=datetime.datetime.now()数据。sort_values('time',ascending=False,inplace=True)#按照时间列降序end=datetime.datetime.now()print(end-start)#测试Pandas排序时间mycursor.close()mydb.close()returndatadefmain():data=pa()if__name__=="__main__":下面的main()是3次的测试结果,平均值是0.433s3.下面的Python列表是Python列表的测试源码将熊猫导入为pdimportmysql.connectorimportdatetimedefconnect():mydb=mysql.connector.connect(host="127.0.0.1",user="root",passwd="sdddddddd",database="abc")返回mydbdefpy():mydb=connect()mycursor=mydb.cursor()mycursor.execute("SELECT*FROMMy_table")data_sql=mycursor.fetchall()start=datetime.datetime.now()data_sql.sort(key=lambdax:x[7],reverse=True)#按照第8列降序排列(时间列)end=datetime.datetime.now()print(end-start)#测试PythonList查询性能mycursor.close()mydb.close()returndata_sqldefmain():data_sql=py()if__name__=="__main__":main()测试结果如下及3次的平均值是0.064s4.总结1.用Python调用Mysql和直接用Mysql查询性能差不多,可以忽略不计0.064s的时间,看来Python大数据分析性能很强~这里想到一个问题,Pandas基于NumPy开发,内部实现由C语言完成,理论性能应该是极强的,为什么Python的list性能强r在测试中比Pandas好吗?(大概强5倍)想知道的朋友留言,谢谢!共同进步~
