我需要通过C程序将数据采集系统收集的数据放在MySQL数据库上。 我有2个表,3列和5列(和第二个表的1个外键)。 目前,尽管我的计算机非常好(并且该程序必须在糟糕的计算机上运行),但需要花费几分钟来放置大约4000个值(最终可能会有更多的值)。
有没有办法让它更快?
我知道发布了类似的问题,但答案对我来说太先进了。
答案 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;
在完成后重新启用这些检查。