[英]mysql stored procedure bulk insert
我有一个看起来像这样的存储过程:
InsertItem: INSERT INTO (IN itemId INT, name TEXT);
有办法可以执行其中的大部分吗? 喜欢而不是执行类似的事情:
using (MySqlConnection connection = new MySqlConnection(_connectionString))
{
connection.Open();
foreach (Item item in GetItems())
{
using (MySqlCommand command = new MySqlCommand("InsertItem", connection))
{
command.CommandType = CommandType.StoredProcedure;
command.Parameters.AddWithValue("@itemId", item.ItemId);
command.Parameters.AddWithValue("@name", item.Name);
command.ExecuteNonQuery();
}
}
}
我正在尝试实现看起来像这样的代码而没有成功:
using (MySqlConnection connection = new MySqlConnection(_connectionString))
{
connection.Open();
using (MySqlCommandBulk command = new MySqlCommand("InsertItem", connection))
{
command.CommandType = CommandType.StoredProcedure;
for (Item item in GetItems())
{
MySqlCommandBulkItem bulkItem = new MySqlCommandBulkItem();
bulkItem["itemId"] = item.ItemId;
bulkItem["name"] = item.Name;
command.BulkItems.Add(bulkItem);
}
command.Execute();
}
}
我的观点是该命令将一次发送所有数据,而不会单独发送每个查询。
有任何想法吗?
用于Dotnet框架的Oracle连接器允许使用数组代替参数的标量。 但是MySQL连接器没有。
有两种方法可以加快MySQL中的批量加载。
其中之一适用于InnoDB表,但不适用于MyISAM表。 开始交易。 然后,每隔几百行,提交并开始另一行。 这将成束提交表插入,这比单独自动提交表插入要快。
另一种方法是使用MySQL的LOAD DATA INFILE命令吸收数据文件并将其批量插入数据库。 这非常快,但是您必须勤奋地正确格式化文件。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.