python-mysqldb:如何从数据库中有效地获取数百万/数十亿条记录?

时间:2012-03-12 21:15:04

标签: python mysql mysql-python

  • 我有一张表,我必须从中获取大约700万条记录,这也将达到数十亿条记录(因为每天都会添加数据)
  • 我正在使用mysql-python连接到远程MySQL数据库

  • 我查询如下

  

cursor = conn.cursor()
  cursor.execute(查询)
  返回光标

并尝试将其打印为

sql = 'select * from reading table;' # has 7 million records
cursor = MySQLDB.execute(sql)
for row in cursor:
        print row
  • 打印它需要永远。

在服务器上,我看到进程正在运行

 PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                                                                                                                                                                                                                                                                     
 3769 mysql     20   0 1120m 276m 5856 S  125  1.7   2218:09 mysqld      

问题 使用python使用{m,b}错误记录查询表的有效方法是什么?

谢谢

1 个答案:

答案 0 :(得分:5)

我建议两个选择:

  1. 将所需数据导入到SELECT OUTFILE或甚至使用mysql控制台的文件中,并使用该文件。

  2. 你应该明白,默认情况下,mysql将整个结果集发送到客户端,并且客户端模仿,就像逐行读取数据一样(尽管整个结果已经在内存中,或者如果存在则失败内存不足)。或者,结果集可以在服务器端形成。为此,您需要将cursor=MySQLdb.cursors.SSCursor参数添加到MySQLdb.connect(有关详细信息,请参阅http://mysql-python.sourceforge.net/MySQLdb.html)。