在MySQL中快速插入大量数据的最佳方法是什么?
我用C编写了一个程序来解析大型XML文件,然后用insert语句创建文件。其他一些进程会将文件摄取到MySQL数据库中。 这些数据将用作索引服务,以便用户可以轻松查找文档 我选择InnoDB是因为它具有行级锁定的能力。C程序将在给定的调用上生成500到500万条insert语句 将所有这些数据尽快输入数据库的最佳方法是什么?另一件需要注意的事情是,数据库位于单独的服务器上。是否值得将文件移动到该服务器以加快插入速度在MySQL中快速插入大量数据的最佳方法是什么?,mysql,performance,load-data-infile,insert,Mysql,Performance,Load Data Infile,Insert,我用C编写了一个程序来解析大型XML文件,然后用insert语句创建文件。其他一些进程会将文件摄取到MySQL数据库中。 这些数据将用作索引服务,以便用户可以轻松查找文档 我选择InnoDB是因为它具有行级锁定的能力。C程序将在给定的调用上生成500到500万条insert语句 将所有这些数据尽快输入数据库的最佳方法是什么?另一件需要注意的事情是,数据库位于单独的服务器上。是否值得将文件移动到该服务器以加快插入速度 编辑:此表不会真正更新,但将删除行 我至少会按照以下方式做这些事情: 将文件移到
编辑:此表不会真正更新,但将删除行 我至少会按照以下方式做这些事情:
- 使用mysqlimport工具或LOAD DATA INFILE命令
- 暂时禁用数据完整性不需要的索引
(要发送的文本越少,操作越短)如果不能像其他人建议的那样使用加载数据填充,请使用准备好的插入查询。实际上取决于引擎。如果您使用的是InnoDB,请务必使用事务(您无法避免它们,但如果您使用autocommit,则每个批都隐式地包含在自己的txn中),但请确保它们既不太大也不太小 如果您使用的是MyISAM,那么事务将毫无意义。您可以通过禁用和启用索引来实现更好的插入速度,但这只适用于空表 如果你从一张空桌子开始,那通常是最好的
无论哪种方式,加载数据都是赢家。如果它是一个只写的表,并且他可以被要求使用std MySQL格式,这就是所有开销。特别是你不需要的事务开销。你真的认为这比加载数据快吗?呵呵,也许不是,但是如果加载数据不是一个选项,其余的都是有意义的。
INSERT INTO TableName(Col1,Col2) VALUES (1,1),(1,2),(1,3)