c编程加速mysql\u查询
我有6530行数据要查询并插入数据库。有没有办法加快速度?这花了7分钟 column_counter是我的行的大小。我使用snprintf将我的值转换成字符串,以便mysql\u查询将接受它 我更新了代码。它现在禁用AUTCOMIT。我删除了记忆集。我想我需要它来避免分段错误。谢谢你的建议c编程加速mysql\u查询,mysql,c,Mysql,C,我有6530行数据要查询并插入数据库。有没有办法加快速度?这花了7分钟 column_counter是我的行的大小。我使用snprintf将我的值转换成字符串,以便mysql\u查询将接受它 我更新了代码。它现在禁用AUTCOMIT。我删除了记忆集。我想我需要它来避免分段错误。谢谢你的建议 mysql_autocommit(con, 0); for(i = 0; i < column_counter; i++) { snprintf(querystring, sizeQueryst
mysql_autocommit(con, 0);
for(i = 0; i < column_counter; i++)
{
snprintf(querystring, sizeQuerystring,
"INSERT INTO earnings " \
"VALUES (%d, %d, %d, %d)",
column1[i], column2[i], column3[i], column4[i]);
if (mysql_query(con, querystring)) {
fprintf(stderr,"Insert failed\n");
fprintf(stderr,"%s\n",mysql_error(con));
finish_with_error(con);
}
//memset(querystring, 0, 256);
if(i - 1 == column_counter)
{
printf(" finished with earnings.csv \n", column_counter);
}
}
mysql_commit(con);
我有6530行数据要查询并插入数据库。是
有没有办法加快速度?这花了7分钟
您至少可以对MySQL API的使用方式进行两种不同且兼容的更改:
由于您正在执行的所有insert语句都具有相同的形式,并且只在插入的值上有所不同,因此您应该能够创建一个可以重用的insert语句。在这种情况下,这节省了大量时间,因为SQL只需要解析一次
因为我没有看到对mysql\u提交的调用,所以我假设您是在自动提交模式下操作的。在同一事务中将一组语句批处理在一起,然后一次提交它们通常更有效。这需要在结束时,即循环终止后,执行手动提交
此外,虽然它不太可能对总时间有多大贡献,但您可以在循环结束时去掉memset。这是毫无意义的,因为您只需要在下一次迭代中覆盖相同的字节。需要多一点编码,但像这样的一个insert命令中的多行将带来巨大的性能提升: 计入收益 值%d,%d,%d,%d, 值%d,%d,%d,%d, .
.通常,将插入放入事务中会显著提高速度。我不知道MySQL是如何工作的。当您需要索引时,请尝试在所有插入都完成后创建它。@harandk循环需要7分钟。不确定你要说什么做什么。关于:用errorcon完成;应该退出或返回,而不是继续运行循环;完全没有必要,因为对snprintf的调用将覆盖该值。从发布的代码来看,sizeQueryString和256似乎是相同的。所以256是一个“神奇”的数字。建议使用“sizeQueryString”而不是256I禁用自动提交模式。我删除了记忆集。你有没有可能帮助准备好的陈述?我在理解文档时遇到困难。@noobprogrammer1987,包含完整的示例。谢谢。我错过了。