我正在使用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脚本一起运行。
答案 0 :(得分:4)
您正在以基于游标的可更新查询进行更新,该查询必须读取每条记录并有条件地写回一些内容。你正在做代码中所有繁重的工作,而不是让数据库去做。
尝试使用更新查询仅更新符合条件的记录。你不需要eachRow来做这件事。