繁体   English   中英

mysql存储过程批量插入

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM