我正在使用 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/