【发布时间】:2020-07-28 20:18:33
【问题描述】:
这是我的情况。我得到了这样一个虚构的原始 csv 数据集,平均包含大约 100 万行。我会经常每 2 周获得一次这个数据集。
PROJECT, MD5SUM_VALUE, USAGE_NAME
A,132412341324asdf,Apple
B,13404892340asdf9,Banana
...
我有 mysql 表
PROJECT_TABLE (id, value),
MD5SUM_VALUE (id, value)
USAGE_NAME (id, name)
RECORD_TABLE (id, project_id, MD5SUM_id, USAGE_id)
我一直在使用脚本将 PROJECT 的值(使用 INSERT IGNORE)快速文件加载到 PROJECT_TABLE 中,并为 MD5SUM_VALUE 和 USAGE_NAME 使用类似的策略。
就目前而言,我已经了解了
- USAGE_NAME 表的 17,115,235 个唯一行条目
- MD5SUM_VALUE 表的 3,001,675 个唯一行条目
- PROJECT 表的 200 个唯一行条目
- RECORD_TABLE 表超过 59m 行
我上传 RECORD_TABLE 的速度似乎很慢。我需要进行查询以识别 id(project_id、MD5SUM_id、USAGE_id)并为每个原始 csv 文件执行 100 万次以上。
有没有更好的上传数据的方法?似乎没有办法快速上传这个数据部分?我应该采用不同的结构吗?
【问题讨论】:
-
你能用
LOAD DATA INFILE吗? -
我已经为填充 USAGE_NAME、MD5SUM_VALUE、PROJECT 表执行此操作。如何为 RECORD_TABLE 做到这一点?
-
是的,没有脚本是不可能的,因为它必须找到 ID。
-
通常的优化方法是
INSERT INTO ... VALUES (...), (...), (...), ...。将数百行收集到一个查询中。
标签: mysql