背景
在利用python连接mysql库下载数据时,用传统的fetch方式,在数据量达到百万级后,往往要等待很长很长时间,才能把数据全部加载完。现在,本文将介绍一种更为快速高效的方式来下载数据。
传统方式
用python的pymysql包来获取数据库连接,并读取数据。
见代码示例:
conn = getMysqlConn() # 获取mysql连接的方法
cursor = conn.cursor()
stmt = """select * from TABLE_NAME """
cursor.execute(stmt)
for f in cursor.fetchall():
# 加载数据
pass
优化方式
用mysql的指令将下载到本地,再去加载文件。
指令如下:
mysql -h10.xx.232.xxx -uroot -p123456 -P3306 -A database_name --default-character-set=utf8 -ss -e "select * from table_name " > /data/xxx/download.csv
(mysql的ip, port, 数据库名信息按实际情况填写)
效率对比
60个字段的表结构,下载时间对比:
| 数据量 | 原始下载方式 | mysql指令下载 |
|---|---|---|
| 40w | 137秒 | 9秒 |
| 560w | 2645秒 | 224秒 |
(注:上述时间包含了下载数据+加载到内存)
结论
直接使用mysql指令下载数据,全方位的领先于直接使用python的fetch方式,在数据量较大时,可以考虑使用这种方式来进行数据读取。