今天学习Docker,在弄MySQL容器的时候,需要往这个数据库容器里面插入大量的数据,这时在想,即便是写一个程序来导入数据应该也需要花费不少的时间吧。我就在想,有没有一种解决方案可以快速解决这个问题,突然想起了之前在学MySQL时,学到的SQL优化问题,里面就有针对insert
做出的优化,就是把一个特定格式的文本文件,直接使用MySQL提供的load
指令来把特定格式的文本文件加载到指定的数据库里面。
下面是我整理的一种优化方法:
下图是需要准备的文本文件格式,列之间用逗号隔开(英文格式)。
1、在连接数据库服务器的时候,加上参数 —local-infile
1 | mysql --local-infile -u root -p |
2、输入正确的密码登录到数据库后,设置全局参数local-infile的值为1,开启从本地加载文件导入数据的开关
1 | set global local-infile = 1; |
3、执行load
指令将准备好的数据,加载到表结构中
1 | load data local infile '/root/test.txt' into table tb_user fields terminated by ',' lines terminated by '\n'; |
注:上面这句指令的意思是从本地加载数据到那个数据表,用逗号隔开,以换行符结束。
下面是执行完一个百万级数据量数据的执行时间,只用了接近17秒的时间,可以说是非常快的速度了。
这里也有一个小细节,就是如果文本数据是按照主键顺序来插入的话,性能是要高于乱序插入的。
这里也分享一个在Linux虚拟机查看文件参数的一些指令:
1 | # 查看文件行数 |
本文作者:
Long HY
本文链接: https://longzas.github.io/2023/08/18/%E5%BE%80%E8%99%9A%E6%8B%9F%E6%9C%BA%E7%9A%84Mysql%E6%95%B0%E6%8D%AE%E5%BA%93%E6%8F%92%E5%85%A5%E5%A4%A7%E9%87%8F%E6%95%B0%E6%8D%AE%E7%9A%84%E4%B8%80%E7%A7%8D%E8%A7%A3%E5%86%B3%E6%96%B9%E6%A1%88/
版权声明: 本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。转载请注明出处!
本文链接: https://longzas.github.io/2023/08/18/%E5%BE%80%E8%99%9A%E6%8B%9F%E6%9C%BA%E7%9A%84Mysql%E6%95%B0%E6%8D%AE%E5%BA%93%E6%8F%92%E5%85%A5%E5%A4%A7%E9%87%8F%E6%95%B0%E6%8D%AE%E7%9A%84%E4%B8%80%E7%A7%8D%E8%A7%A3%E5%86%B3%E6%96%B9%E6%A1%88/
版权声明: 本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。转载请注明出处!