首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在mysql数据库中加载16,000行数据的快速方法

问在mysql数据库中加载16,000行数据的快速方法
EN

Stack Overflow用户
提问于 2012-10-10 10:25:10
回答 3查看 1.7K关注 0票数 0

目前我在一个数组中有16k行数据,我使用for循环遍历数据并执行INSERT语句。换句话说,在mysql中,每个循环执行一条"INSERT“语句。这样做了16000次。这需要很长时间。

有没有更好的嵌入批量数据的方法?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-10-10 10:29:39

你可以按照Pascal MARTIN的post来尝试一下:

代码语言:javascript
复制
insert into your_table (field1, field2, field3)
values 
  (value1_1, value1_2, value1_3), 
  (value2_1, value2_2, value2_3), 
  (value3_1, value3_2, value3_3)
票数 0
EN

Stack Overflow用户

发布于 2012-10-10 10:37:04

我使用下面的代码(使用sqlParameters)在SQL语言中实现了这一点:

代码语言:javascript
复制
    Dim Command As New SqlCommand(_
            "insert into hilmarc_cem_items " & _
            "(CEMID, " & _
            "ItemCode, " & _
            "UnitPrice, " & _
            "Quantity, " & _
            "UOM) "     


    Dim ItemCodes() As String = Request.Form.GetValues("ItemCode")
    Dim UnitPrices() As String = Request.Form.GetValues("UnitPrice")
    Dim Quantities() As String = Request.Form.GetValues("Quantity")
    Dim UOMs() As String = Request.Form.GetValues("UOM")

    For Counter = 0 To ItemCodes.Length - 1
        Command.CommandText &= "select @CEMID, @ItemCode" & Counter & ", @UnitPrice" & Counter & ", @Quantity" & Counter & ", @UOM" & Counter & " "
        Command.Parameters.Add("@ItemCode" & Counter, Data.SqlDbType.NVarChar).Value = ItemCodes(Counter)
        Command.Parameters.Add("@Quantity" & Counter, Data.SqlDbType.Decimal).Value = Quantities(Counter)
        Command.Parameters.Add("@UOM" & Counter, Data.SqlDbType.NVarChar).Value = UOMs(Counter)
        Command.Parameters.Add("@UnitPrice" & Counter, Data.SqlDbType.Decimal).Value = UnitPrices(Counter)
        If Not Counter = ItemCodes.Length - 1 Then
            Command.CommandText &= "union all "
        Else
            Command.CommandText &= ";"
        End If
    Next

其思想是只有一个查询,从数组中获取所有数据,并将它们作为参数添加到sqlCommand中。查询将如下所示:

代码语言:javascript
复制
    insert into myTable 
        (CEMID, 
        ItemCode,
        UnitPrice,
        Quantity, 
        UOM) 
    select @CEMID, @ItemCode0, @UnitPrice0, @Quantity0, @UOM0
    union all
    select @CEMID, @ItemCode1, @UnitPrice1, @Quantity1, @UOM1
    union all
    select @CEMID, @ItemCode1, @UnitPrice1, @Quantity1, @UOM1
    union all

我不确定这在MySQL中是否有效,只需将代码转换为MySQL即可。

票数 0
EN

Stack Overflow用户

发布于 2012-10-10 13:22:36

尝试生成批量插入语句。语句的长度应该小于max_allowed_packet,它是一个包或任何生成的/中间字符串的最大长度。

如果可能-暂时禁用或删除表中的索引。

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

https://stackoverflow.com/questions/12811103

复制
相关文章

相似问题

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