作者热门文章
- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
当我从 rows.scan(&a, &b...)
中的 SELECT * FROM table
获得 20k-50k 或更多行时,我遇到了性能问题。我不知道在这种情况下如何使用并发,因为我需要使用 rows.Next()
进行迭代,而我不能以并发方式进行。
仅当我将结果从行扫描到 rows.Scan
中的结构字段时,性能才会下降。
查询需要 5-15 毫秒,但扫描需要(40k 行)800-2000 毫秒。
谢谢!
最佳答案
由于“rows.Next()”是顺序的,您需要将查询拆分为多个语句,然后同时处理它们。
func main() {
queries := []string{
"SELECT * FROM abc where a < 10000",
"SELECT * FROM abc where a >= 10000 && a <= 30000",
"SELECT * FROM abc where a > 30000",
}
for _, query := range queries {
go dbCall(query)
}
}
func dbCall(query string) {
rows, _ := db.Query(query)
for rows.Next() {
var a, b, c int
_ = rows.Scan(&a, &b, &c)
// Process row
}
}
根据您的用例,必要时使用 channel 、锁等。
关于sql - 如何在 Go 中快速获取多行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41492793/
我是一名优秀的程序员,十分优秀!