亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

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 關注
  • 2788 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號