为了账号安全,请及时绑定邮箱和手机立即绑定

go-sql-driver/mysql for rows.Next()的性能问题

go-sql-driver/mysql for rows.Next()的性能问题

MMMHUHU 2018-08-29 07:47:51
1.当查询出来的记录过万时,遍历Rows的时间过长,达到1分钟甚至更多程序代码:rows, err := p.conn.Query(sqlStr, params...)if err != nil {    log.Println("mysql query error", err.Error())    return nil, err}log.Println("conn结束:", goutil.GetCurrentTime())//延时关闭Rowsdefer rows.Close()//获取记录列if columns, err := rows.Columns(); err != nil {    return nil, err} else {    //拼接记录Map    values := make([]sql.RawBytes, len(columns))    scans := make([]interface{}, len(columns))    for i := range values {        scans[i] = &values[i]    }    //此处遍历在3W记录的时候,长达1分钟甚至更多    for rows.Next() {        _ = rows.Scan(scans...)        each := map[string]interface{}{}        for i, col := range values {            each[columns[i]] = string(col)        }        rowMaps = append(rowMaps, each)    }    return rowMaps, nil}
查看完整描述

2 回答

?
精慕HU

TA贡献1845条经验 获得超8个赞

这不是golang性能的问题,其他编程语言也会类似。一次性去拿三万条记录本来就是个不合理的需求,应该通过分页来解决,一次只取几十到几百条。

查看完整回答
反对 回复 2018-09-06
?
繁星淼淼

TA贡献1775条经验 获得超11个赞

可以用创建多个goroutine 分段查询数据。使用channl在线程中拿去查询结构进行迭代。

查看完整回答
反对 回复 2018-09-06
  • 2 回答
  • 0 关注
  • 2709 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信