Python+MySQLdb,简单查询速度比平面文件访问慢
- 我有一个简单的表格,里面有80,000行数据。
- 我想尽快把所有行选出来并保存到Python的列表里。
- 这个过程大约需要4到10秒。
相比之下,如果我把同样的表格导出成CSV文件,然后用下面的代码处理:
f = open('list.csv','rb')
lines = f.read().splitlines()
f.close()
print len(lines)
这个过程只需要0.08到0.3秒
我尝试过使用MySQLdb和mysql.connector,使用fetchall()或者fetchone()来获取数据:
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)
这个过程需要3.7到8秒,而且CPU负载很高
有没有可能像处理CSV文件那样快呢?
编辑
我的MySQL服务器似乎没问题。在MySQL控制台中:
SELECT * from TABLE;
....
80789 rows in set (0.21 sec)
1 个回答
0
当你执行 cur.execute(...)
这个命令时,所有的查询结果会在客户端以列表的形式被恢复。你可以在 MySQLdb/cursor.py 文件中查看 self._rows 这个属性。
也就是说,从文件中读取内容和从 MySQL 数据库获取查询结果所花费的时间是不同的。大家都知道,内置函数的速度总是比第三方函数快。所以我觉得没有办法让 cursor.execute()
的速度和 open()
一样快。
至于为什么 open()
更快,我建议你去看看 Python 的源代码。这里有一个 链接。
希望这对你有帮助。