【问题标题】:MySQL LOAD DATA LOCAL INFILE vs. SQL fileMySQL LOAD DATA LOCAL INFILE 与 SQL 文件
【发布时间】:2013-09-24 12:34:53
【问题描述】:

每天我们使用以下方法将大约 6GB 的 CSV 文件加载到 MySQL 中:

LOAD DATA LOCAL INFILE 'file$i.csv' INTO TABLE tableName FIELDS TERMINATED BY ',' ENCLOSED BY '\"' LINES TERMINATED BY '\n';

我们有 6 个文件要经过此过程,因此需要一些时间。由于我们自己生成这些文件,因此我们可以控制输出的格式。

最初我们选择 CSV 是因为这是一个较小的流程,而且我们需要移动数据并让非开发人员轻松读取。但是现在,这不是什么大问题,因为加载时间是如此惊人,我们现在正在谈论几个小时。

将每一行作为 INSERT 查询输出到单个文件并执行该查询是否更快,还是 CSV 更快?

我们正在使用 InnoDB 存储引擎。

【问题讨论】:

    标签: mysql sql csv


    【解决方案1】:

    如果您使用 MyISAM 表,请尝试 ALTER TABLE table_name DISABLE KEYS;在加载数据和 ALTER TABLE table_name ENABLE KEYS 之前;数据导入完成后。这将大大减少您处理大量数据所花费的时间。

    加载数据比为每一行单独插入语句更快。

    【讨论】:

    • 我应该提到我们正在使用INNODB
    • 您可以发布以下数据库值吗? innodb_buffer_pool_size innodb_log_file_size innodb_flush_log_at_trx_commit 同时让我们知道您的硬件配置(尤其是 RAM)。
    • innodb_buffer_pool_size=26G, innodb_flush_log_at_trx_commit=2 硬件为:32GB RAM,8 CPU (4 x 2)。
    • 好吧,在这种情况下,将这些文件分成更小的块应该会有所帮助。 InnoDB 通过 LOAD DATA 加载大文件的速度较慢。看看这个[链接]mysqlperformanceblog.com/2008/07/03/…
    • 仍然是 CSV 会更快,因为对于 SQL 语句文件,它必须读取每条语句并逐条处理。而对于 CSV 文件,它会批量加载数据然后提交。
    猜你喜欢
    • 1970-01-01
    • 2012-10-05
    • 1970-01-01
    • 1970-01-01
    • 2012-06-01
    • 2020-07-25
    • 2013-01-24
    • 1970-01-01
    相关资源
    最近更新 更多