Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python+MySQLdb,与平面文件访问相比,简单选择速度太慢 我有一个简单的表,有80000行。 我试图尽可能快地选择所有行并将其保存到python列表中。 大约需要4-10秒。_Python_Performance_Optimization_Mysql Python - Fatal编程技术网

python+MySQLdb,与平面文件访问相比,简单选择速度太慢 我有一个简单的表,有80000行。 我试图尽可能快地选择所有行并将其保存到python列表中。 大约需要4-10秒。

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

相反,如果我将完全相同的表转储到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('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行,看看是否有任何区别。