我在C中编写了一个程序来解析大型XML文件,然后使用insert语句创建文件。其他一些进程会将文件摄取到MySQL数据库中。 此数据将用作索引服务,以便用户可以轻松找到文档。
我选择了InnoDB来实现行级锁定。 C程序将在给定的调用中生成500到500万个插入语句。
将所有这些数据尽快送入数据库的最佳方法是什么?另一件需要注意的是,DB位于单独的服务器上。是否值得将文件移动到该服务器以加速插入?
编辑:此表不会真正更新,但会删除行。
答案 0 :(得分:15)
答案 1 :(得分:2)
我根据this link至少做这些事情:
答案 2 :(得分:1)
答案 3 :(得分:1)
交易消除了
INSERT,SYNC-TO-DISK
重复阶段,而是在COMMIT事务时执行所有磁盘IO。
原始文本+ GZip压缩流〜=在某些情况下可节省高达90%的带宽。
INSERT INTO TableName(Col1,Col2) VALUES (1,1),(1,2),(1,3)
(减少要发送的文字,缩短操作次数)
答案 4 :(得分:1)
如果您不像其他人建议的那样使用LOAD DATA INFILE,请使用准备好的插入查询。
答案 5 :(得分:1)
真的取决于引擎。如果您正在使用InnoDB,请使用事务(您无法避免它们 - 但如果您使用自动提交,则每个批处理都隐含在它自己的txn中),但要确保它们既不会太大也不会太小。
如果您使用的是MyISAM,则交易毫无意义。您可以通过禁用和启用索引来实现更好的插入速度,但这只适用于空表。
如果你从空表开始,这通常是最好的。
LOAD DATA无论如何都是胜利者。