Mysql Groovy withBatch非常慢

Mysql Groovy withBatch非常慢,mysql,groovy,Mysql,Groovy,我正在尝试使用Groovy的批处理函数,它非常慢(15秒)。我尝试过不同的批量大小(10400…),每次都要花很多时间 这是我用它编写的第二个查询,它们都很慢 这是我的密码。是有缺陷还是我用错了 static updateCSProducts(def conn, def webProductRows){ conn.withBatch(400, """ UPDATE cscart_products p SET usergroup_ids=:usergroup_ids,

我正在尝试使用Groovy的批处理函数,它非常慢(15秒)。我尝试过不同的批量大小(10400…),每次都要花很多时间

这是我用它编写的第二个查询,它们都很慢

这是我的密码。是有缺陷还是我用错了

static updateCSProducts(def conn, def webProductRows){
conn.withBatch(400, """
    UPDATE cscart_products p 
    SET usergroup_ids=:usergroup_ids,
        b2b_group_ids=:b2b_group_ids,
        b2b_desc_hide=:b2b_desc_hide
    WHERE product_code = :product_code
        OR product_id = (SELECT product_id FROM cscart_product_options_inventory WHERE product_code = :product_code)
""") { ps ->
    webProductRows.each({row ->
        ProductType type = ProductType.fromCode(row.type)
        String userGroupIds = type.getProductAvailabilityUserGroup().collect{it.getId()}.join(",")
        String b2bGroupIds = type.getB2bUserGroup().collect{it.getId()}.join(",")
        boolean b2bDescHide = !type.getB2bUserGroup().isEmpty()
        println row.id + " " + userGroupIds + " " + b2bGroupIds + " " + b2bDescHide
        ps.addBatch(product_code:row.id, usergroup_ids:userGroupIds, b2b_group_ids:b2bGroupIds, b2b_desc_hide:b2bDescHide)
    })
}
}

我使用MySql作为数据库。当我查看SQL连接时,在等待下一批处理时,实际上没有看到任何连接运行查询

编辑:
我已经删除了查询,但仍然非常慢。 更新版本如下:

conn.withBatch(400, """
    UPDATE cscart_products p 
    SET usergroup_ids=:usergroup_ids,
        b2b_group_ids=:b2b_group_ids,
        b2b_desc_hide=:b2b_desc_hide
    WHERE p.product_code = :product_code    
""") { ps ->
    webProductRows.each({row ->
        ProductType type = ProductType.fromCode(row.type)
        String userGroupIds = type.getProductAvailabilityUserGroup().collect{it.getId()}.join(",")
        String b2bGroupIds = type.getB2bUserGroup().collect{it.getId()}.join(",")
        String b2bDescHide = !type.getB2bUserGroup().isEmpty() ? 'Y' : 'N'
        println row.id + " " + userGroupIds + " " + b2bGroupIds + " " + b2bDescHide
        ps.addBatch(product_code:row.id, usergroup_ids:userGroupIds, b2b_group_ids:b2bGroupIds, b2b_desc_hide:b2bDescHide)
    })
}

每次更新都会运行大量查询。您最好检索一个数据列表,然后在上面循环。这不是批处理的瓶颈,而是您的实现

product_代码列上有索引。我已经删除了查询,但仍然非常慢。请参阅更新。否,在每个迭代中仍有查询
ProductType.fromCode()
type.getProductAvailabilityUserGroup()
,等等。这些都是在后台运行的查询。我建议打开SQL日志来查看您正在运行的查询数量,您可能会感到惊讶。不,这些是枚举和枚举中某个字段的访问器。它不会进入数据库。如果我对这行进行注释,它运行得非常快:ps.addBatch(产品代码:row.id,用户组id:usergroupID,b2b组id:B2BGroupID,b2b描述隐藏:b2bDescHide)