MySQL的C API是否支持批量更新?我正在编写一个应用程序,其中大批量处理某些事务。如果在记录过程中我最终为每个插入执行单个调用DB,那将非常低效。
C是否与Java的批量SQL更新API类似?
谢谢,
<磷>氮答案 0 :(得分:6)
您有几个选项可以帮助加快MySQL中的INSERT
:
您可以准备查询并使用不同的值执行查询。这比为插入的每一行准备和执行查询的开销要少。请参阅“C API Prepared Statement Function Overview。”
您可以使用一个INSERT
语句插入多行。请参阅“INSERT Syntax。”
您可以使用API支持在一次调用中执行多个语句。请参阅“C API Support for Multiple Statement Execution。”
您绝对应该使用显式事务(假设您使用InnoDB)以避免每行启动和提交事务的开销。
在Speed of INSERT Statements中还有其他提高INSERT
速度的提示。
批量数据加载的最佳性能是通过LOAD DATA INFILE
实现的。这比使用INSERT
快20倍。请参阅“LOAD DATA INFILE Syntax。”
答案 1 :(得分:-1)
是的,即使没有任何单独的功能。看看:
http://dev.mysql.com/doc/refman/5.0/en/c-api-multiple-queries.html
您必须指定mysql_real_query()应该解析由;分隔的多个语句;提前,通过在连接或使用mysql_set_server_option()时启用标记。
mysql_set_server_option(&mysql, MYSQL_OPTION_MULTI_STATEMENTS_ON);
这就是php实现mysqli_multi_query():
的方式PHP_FUNCTION(mysqli_multi_query)
{
// ...
MYSQLI_ENABLE_MQ;
if (mysql_real_query(mysql->mysql, query, query_len)) {
// ...
MYSQLI_DISABLE_MQ;
// ...
RETURN_FALSE;
}
RETURN_TRUE;
}
MYSQLI_ENABLE_MQ宏评估我上面提供的代码。