python + MySQLdb,简单的选择与平面文件访问相比太慢

时间:2014-09-10 00:54:06

标签: python performance optimization mysql-python

  • 我有一个简单的表,有80 000行。
  • 我正在尝试尽快选择并保存所有行到python列表。
  • 大概需要4-10秒。

相反,如果我将完全相同的表转储到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)

1 个答案:

答案 0 :(得分:0)

cur.execute(...)完成时,整个查询结果将在客户端恢复为列表。检查MySQLdb / cursor.py中的self._rows属性。

也就是说,时间成本在读取文件内容和从MySQL数据库中获取查询结果方面有所不同。就像我们所有人一样,内置函数总是比3PP函数更快。所以我认为没有办法让cursor.execute()open()速度相同。

至于为什么open()更快,我建议您查看Python源代码。这是link

希望它有所帮助。