首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mysql存储过程大容量插入

mysql存储过程大容量插入
EN

Stack Overflow用户
提问于 2016-01-17 00:09:41
回答 1查看 1.5K关注 0票数 0

我有一个如下所示的存储过程:

代码语言:javascript
复制
InsertItem: INSERT INTO (IN itemId INT, name TEXT);

有没有办法让我执行大量的代码?像这样,而不是执行这样的东西:

代码语言:javascript
复制
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();
        }
    }
}

我正在尝试实现这样的代码,但没有成功:

代码语言:javascript
复制
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();
    }
}

我的观点是,该命令将一次发送所有数据,而不是单独发送每个查询。

有什么想法吗?

EN

回答 1

Stack Overflow用户

发布于 2016-01-17 00:48:55

Dotnet框架的Oracle连接器允许使用数组代替参数上的标量。但是MySQL连接器没有。

有两种方法可以加速MySQL中的批量加载。

其中之一适用于InnoDB表,但对MyISAM表没有帮助。启动一个事务。然后,在每几百行之后,提交它并开始另一行。这将成批提交您的表插入,这比单独自动提交它们更快。

另一种方法是使用MySQL的LOAD DATA INFILE命令提取数据文件并将其批量插入到数据库中。这是非常快的,但您必须勤奋地正确格式化您的文件。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34829095

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档