gpt4 book ai didi

sql - 如何在 Go 中快速获取多行?

转载 作者:IT王子 更新时间:2023-10-29 01:44:55 24 4
gpt4 key购买 nike

当我从 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com