mysql - 使用 Groovy SQL 更新的更快方法

标签 mysql groovy

我正在使用 groovy 更新 MySQL 数据库的行,并且使用我使用的方法速度非常慢。我希望您能改进我的示例的性能:

sql.resultSetConcurrency = ResultSet.CONCUR_UPDATABLE

sql.eachRow("SELECT * FROM email) { bt ->
    bt.extendedDesc = update(bt.name, bt.direction)
}

sql.resultSetConcurrency = ResultSet.CONCUR_READ_ONLY

然后是更新方法:

def update(name, direction) {
    if (direction == 'Outgoing') {
        result = 'FROM: '+name
    } else {
        result = 'TO: '+name
    }
    if(result.size() > 75) {
        result = result.substring(0, 72) + "..."
    }
    return result
}

因此它使用一种需要将其他 2 个字段作为参数传递给它的方法来更新电子邮件中每个条目的一个字段(本例中为 extendedDesc)。

速度很慢,每分钟更新 600 条左右,而电子邮件有 200000 条以上 =/

有没有更好的方法来实现这个?如果可能,应该使用 Groovy,因为它需要与我所有其他 Groovy 脚本一起运行。

最佳答案

您正在将更新作为基于游标的可更新查询进行,它必须读取每条记录并有条件地写回一些内容。您正在代码中完成所有繁重的工作,而不是让数据库来完成。

尝试使用更新查询来仅更新符合您条件的记录。您不需要 eachRow 来执行此操作。

关于mysql - 使用 Groovy SQL 更新的更快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6509383/

相关文章:

groovy - 使用 groovy 向下游传递构建参数。 Jenkins 构建管道

mysql - 这个查询应该做什么? (为什么会失败?)

mysql - 如何优化 MySQL View 的性能

java - Hibernate 一对多级联

MySql Select 查询返回记录,当 WHERE 条件不为真时

grails - Groovy 语法,命名 block ?

mysql - "mysqli_insert_id"的问题

groovy - 方法和属性之间的嵌套闭包解析不同?

java - 使用 java "no such file or directory"运行 groovy 编译类的 Bash 错误

spring - 从过滤器获取方法