【问题标题】:Does Load Data Infile load all data to memory first?Load Data Infile 是否首先将所有数据加载到内存中?
【发布时间】:2016-03-31 13:05:32
【问题描述】:

我有一个包含 1000 万行的数据文件,有 2 个字段,id 和 name。文件总大小为 650 MB。

将这些数据加载到数据库表需要多长时间?它是多对多关系的交集表。

这似乎需要很长时间。在加载时,我尝试执行一个 select 语句。但是,它是空的。

MariaDB [wordDS]> select count(*) from Category_Term;
+----------+
| count(*) |
+----------+
|        0 |
+----------+
1 row in set (12.02 sec)

Load Data Infile 已经运行了一段时间,为什么还没有任何数据加载到表中?我怀疑所有数据行都会先读入内存,然后在加载结束时最终写入表中。否则,我可以使用 'select *' 语句来检查加载状态。

【问题讨论】:

    标签: mysql


    【解决方案1】:

    在支持它的表上,比如 InnoDB,它通常是在事务的上下文中加载的,所以在它完成之前你不会看到任何东西。然后所有数据突然可用。

    如果您需要逐个加载它,您可能需要将一个电子表格转换为多个部分并按顺序加载。

    我喜欢将大文件分解成更小的部分,让您有进步的感觉。看到“文件 23/100 完成”比“文件 0/1 完成”要好得多。

    【讨论】:

    • 您是否估计过加载这 1000 万行需要多长时间?
    • 完全取决于您的 MySQL 数据库调优、硬件、服务器负载、表上的其他查询……看看SHOW PROCESSLIST 是一个大概的想法。如果你遇到了一些超级坏运气,它可能会从三十秒到永远不会发生。
    • 整整一天一夜,仍然没有完成。这正常吗?
    • 查看您的进程列表和 CPU 负载。它甚至在做什么吗?可能卡住了。
    • 我的声音卡住了。也许您遇到了死锁情况。值得在DBA site 上询问如何诊断。如果你只是在做LOAD DATA INFILE,那么理论上你的做法是正确的。
    猜你喜欢
    • 2012-07-03
    • 1970-01-01
    • 2020-04-18
    • 2012-06-16
    • 1970-01-01
    • 1970-01-01
    • 2011-04-28
    • 1970-01-01
    • 2019-01-11
    相关资源
    最近更新 更多