一开始开了 100 个 goroute,在每个 goroute 里面一条一条更新数据:
for i:=0; i<100;i++{
go func(chan){
para1 := <- chan
stmt, _ := db.Prepare("update.....")
stmt.Exec(para1)
}
}
可以做到 2 秒钟更新 1000 条。
后来改用事务来批量更新
for i:=0; i<100;i++{
go func(chan){
var paraArray []string
for para := range chan{
paraArray = append(paraArray, para)
if len(paraArray) >= 1000 {
tx, _ := db.Begin()
for _, para := range paraArray{
tx.Exec("update.....", para)
}
tx.Commit()
paraArray = paraArray[:0]
}
}
}
}
这样每个事务里面的 1000 条语句,运行时间高达 1 分钟。请问为什么用事务反而导致效率严重降低了?