gpt4 book ai didi

MySQL - 从 LOCAL INFILE 加载数据 - 如何提高性能

转载 作者:行者123 更新时间:2023-11-29 11:16:45 25 4
gpt4 key购买 nike

问候支持社区,

我尝试使用以下脚本将大约 1000 万多个文件加载到 MySQL 数据库中:

WORKING_DIR=/tmp
FILE1="*test*"
timestamp_format="%Y-%m-%d %H:%i:%s.%x"

for i in ${WORKING_DIR}/${FILE1}
do
if [ -f "$i" ]; then
mysql -uroot -ptest my_database --local-infile=1<<-SQL
SET sql_log_bin=0;
LOAD DATA LOCAL INFILE '${i}' INTO TABLE my_table
FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '\"'
LINES TERMINATED BY '\n'
IGNORE 1 LINES
(id, transaction_id, app_id, sub_id);
SQL
fi
done

这是一个极其缓慢的过程。大约 24 小时后,我只能加载大约 200 万条记录。每个文件中都有一条记录。按照这个速度,大约 5 天就能完成。有没有更快的方法来做到这一点?例如。我应该在处理之前连接文件吗?

任何改进将此数据加载到 MySQL 中的建议将不胜感激。

谢谢!

最佳答案

您(在评论中)询问如何连接您的文件。那将是

cat /tmp/*test1*

虽然显然你实际上想省略每个的第一行:

awk 'FNR>1' /tmp/*test1*

如何让你的 SQL 版本从标准输入读取超出了我的能力范围。如果不能,也许将输出保存到临时文件中,然后进行处理。

如果你得到“参数列表太长”,也许可以尝试

find /tmp -maxdepth 1 -type f -name '*test1*' -exec awk 'FNR>1' {} +

-maxdepth 1 表示不要下降到子目录;如果这不是您想要的,请将其删除。

带有加号的 -exec 可能在非常旧的系统上不可用;如果遇到语法错误,请尝试使用 \; 代替它(尽管可能会带来相当不愉快的性能损失)。

我没有看到这些变量使任何东西变得更清晰、更容易、更具可读性或更易于维护,所以我只是将它们删除。

关于MySQL - 从 LOCAL INFILE 加载数据 - 如何提高性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39601357/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com