如何快速将非常大的 csv 文件导入 mysql?
How can I import very large csv file into mysql fastly?
如果我有例如 1 GB 的 csv 文件并且我想快速将其导入 mysql,我应该怎么做?我之前尝试过导入 1 GB 的文件,大约需要 1.5 小时。我使用具有 16 GB RAM 的计算机。如果我要上传更大的文件,则需要更长的时间。
那么,我应该怎么做才能加快这个过程呢?
谢谢....
您可以暂时禁用key/indexes(对于 MyISAM)所涉及的表
ALTER TABLE ... ENABLE/DISABLE KEYS
或将 AUTO_COMMIT 设置为关闭 InnoDB。
SET AUTOCOMMIT = 0;
SET FOREIGN_KEY_CHECKS = 0;
SET UNIQUE_CHECKS = 0;
SET sql_log_bin = 0;
然后 运行 加载数据 INFILE
注意:这里要注意的一件事是,驻留在同一主机上的源文件可以帮助我们提高性能,因为数据不必通过网络传输。简而言之,使用 LOAD DATA INFILE 而不是 LOAD DATA LOCAL INFILE。
您可以参考这个详细的答案:
MySQL disable & enable keys
将 MySQL 数据库放在更快的磁盘上。
数据库往往受 IO 限制,因此如果您想要更快的数据库,您应该将其放在更快的磁盘硬件上。
您的数据的磁盘存储空间是多少? SATA 驱动器?每秒最多处理 50-70 个 IO 操作。
如果我有例如 1 GB 的 csv 文件并且我想快速将其导入 mysql,我应该怎么做?我之前尝试过导入 1 GB 的文件,大约需要 1.5 小时。我使用具有 16 GB RAM 的计算机。如果我要上传更大的文件,则需要更长的时间。
那么,我应该怎么做才能加快这个过程呢? 谢谢....
您可以暂时禁用key/indexes(对于 MyISAM)所涉及的表
ALTER TABLE ... ENABLE/DISABLE KEYS
或将 AUTO_COMMIT 设置为关闭 InnoDB。
SET AUTOCOMMIT = 0;
SET FOREIGN_KEY_CHECKS = 0;
SET UNIQUE_CHECKS = 0;
SET sql_log_bin = 0;
然后 运行 加载数据 INFILE
注意:这里要注意的一件事是,驻留在同一主机上的源文件可以帮助我们提高性能,因为数据不必通过网络传输。简而言之,使用 LOAD DATA INFILE 而不是 LOAD DATA LOCAL INFILE。
您可以参考这个详细的答案: MySQL disable & enable keys
将 MySQL 数据库放在更快的磁盘上。
数据库往往受 IO 限制,因此如果您想要更快的数据库,您应该将其放在更快的磁盘硬件上。
您的数据的磁盘存储空间是多少? SATA 驱动器?每秒最多处理 50-70 个 IO 操作。