在C中,MySQL INSERT INTO查询速度太慢

时间:2014-05-11 18:32:49

标签: mysql sql c performance insert

我需要通过C程序将数据采集系统收集的数据放在MySQL数据库上。 我有2个表,3列和5列(和第二个表的1个外键)。 目前,尽管我的计算机非常好(并且该程序必须在糟糕的计算机上运行),但需要花费几分钟来放置大约4000个值(最终可能会有更多的值)。

有没有办法让它更快?

我知道发布了类似的问题,但答案对我来说太先进了。

1 个答案:

答案 0 :(得分:3)

您是否可能为每一行使用单独的查询?不要忘记您可以使用单个查询添加多行。例如,而不是

INSERT INTO `foo` VALUES (1, 2, 3);
INSERT INTO `foo` VALUES (4, 5, 6);
INSERT INTO `foo` VALUES (7, 8, 9);

你可以像这样发出一个查询:

INSERT INTO `foo` VALUES (1, 2, 3), (4, 5, 6), (7, 8, 9);

以下是您可以尝试的其他一些优化:

禁用索引

当您更新MySQL表时,它将尝试在每次插入后重建表的索引。对于大型插入,在更新表时临时禁用索引更有效。为此,请在开始更新之前发送此查询:

ALTER TABLE `foo` DISABLE KEYS;

然后在完成时重新启用索引:

ALTER TABLE `foo` ENABLE KEYS;

禁用外键检查

同样,在处理大型表时,这些可能会减慢速度。发出命令

SET FOREIGN_KEY_CHECKS=0;

在开始修改表之前禁用外键检查,

SET FOREIGN_KEY_CHECKS=1;

在完成后重新启用这些检查。