Python+MySQLdb,简单查询速度比平面文件访问慢

3 投票
1 回答
1581 浏览
提问于 2025-04-20 18:48
  • 我有一个简单的表格,里面有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 的源代码。这里有一个 链接

希望这对你有帮助。

撰写回答