【问题标题】:MySQL Efficiently importing large data listsMySQL 高效导入大型数据列表
【发布时间】:2020-02-12 15:58:55
【问题描述】:

我对 SQL 没有那么丰富的经验,我想知道是否有更有效的方法来完成我正在做的事情。

我正在使用 python 和 SQLAlchemy 将非常大的数据集从 csv 导入 sql 表。 我只想导入 csv 中的某些列,所以我创建了一个从 csv 中获取列名的函数,然后另一个过滤掉我不需要的列(方便的是,我不需要的列在列列表的末尾)。然后,我使用 for 循环生成 INSERT INTO 命令并通过附加列名(它们在 csv 和 sql 表中相同)和读取器中每一行的值来执行它。即:

row1: INSERT INTO table (c1, c2, c3) VALUES (v1, v2, v3)
row2: INSERT INTO table (c1, c2, c3) VALUES (v4, v5, v6)
row3: INSERT INTO table (c1, c2, c3) VALUES (v7, v8, v9)

我的 csv 文件大约有 15k 行,因此您可以想象这需要相当长的时间。

有没有办法整合查询以缩短插入这些值的时间?

【问题讨论】:

    标签: python mysql csv sqlalchemy


    【解决方案1】:

    如果你能得到服务器上的数据LOAD DATA INFILE can parse CSV。如果没有,use multi-insert

    第一种方法更快,但如果文件直接位于 MySQL 服务器本身上,LOAD DATA INFILE 效果最好。你可以开启LOCAL模式。

    【讨论】:

    • 多插入会比我现在做的更快吗?
    • 它通常会快 N 倍,其中 N 是您一次插入的行数。换句话说,您的限制是每秒查询数,而不是每秒行数。
    猜你喜欢
    • 2021-05-19
    • 1970-01-01
    • 2016-04-08
    • 1970-01-01
    • 1970-01-01
    • 2012-12-18
    • 2011-10-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多