python+MySQLdb,与平面文件访问相比,简单选择速度太慢 我有一个简单的表,有80000行。 我试图尽可能快地选择所有行并将其保存到python列表中。 大约需要4-10秒。
相反,如果我将完全相同的表转储到csv文件中并使用此代码处理它python+MySQLdb,与平面文件访问相比,简单选择速度太慢 我有一个简单的表,有80000行。 我试图尽可能快地选择所有行并将其保存到python列表中。 大约需要4-10秒。,python,performance,optimization,mysql-python,Python,Performance,Optimization,Mysql Python,相反,如果我将完全相同的表转储到csv文件中并使用此代码处理它 f = open('list.csv','rb') lines = f.read().splitlines() f.close() print len(lines) 只需要0.08-0.3秒 我使用fetchall或fetchone尝试了MySQLdb和mysql.connector import time start = time.time() import MySQLdb as mdb con = mdb.connect('1
f = open('list.csv','rb')
lines = f.read().splitlines()
f.close()
print len(lines)
只需要0.08-0.3秒
我使用fetchall或fetchone尝试了MySQLdb和mysql.connector
import time
start = time.time()
import MySQLdb as mdb
con = mdb.connect('127.0.0.1', 'login', 'p', 'db');
with con:
cur = con.cursor()
cur.execute("SELECT * FROM table")
rows = cur.fetchall()
print len(rows)
print 'MySQLdb %s' % (time.time()-start)
CPU负载高时,耗时3.7-8秒
有可能达到与csv文件相同的速度吗
编辑
我的MySQL服务器似乎还可以。
在mysql控制台中:
SELECT * from TABLE;
....
80789 rows in set (0.21 sec)
当cur.execute。。。完成了。为此,请检查MySQLdb/cursor.py中的self.\u rows属性 也就是说,从MySQL数据库读取文件内容和获取查询结果的时间开销是不同的。我们都知道,内置函数总是比3PP函数快。所以我不认为有办法让cursor.execute以与open相同的速度运行 至于为什么open更快,我建议您研究一下Python源代码。这是你的电话号码
希望有帮助。对于一个简单的选择来说,这似乎太过分了。您100%确定它是实际的表而不是视图吗?问题在于数据库服务器的配置或数据库设计,与Python无关。从执行时间中减去从命令行运行查询所需的时间。然后与csv文件进行比较,我尝试在mysql控制台中运行查询:设置0.21 sectry pyodbc中的80789行,看看是否有任何区别。