mysql 中的 "rows scan" 和 "page limit" 有什么区别?



我在mysql中有一个SELECT句子:

SELECT * FROM `my_flows` WHERE deleted = 0 AND status = 0 AND end_time > '2022-02-03 13:54:48.173'

并且deletedstatusend_time列中有索引,id有一个主键。

我不想得到所有处理的结果,我有两种方法:

  1. gorm中使用这样的rows scan
rows, err := db.Model(&ModelInfo{}).Where(...).Rows()
// ignore error judge
defer rows.Close()
for rows.Next() {
....
}
  1. 使用page limit,我为下一页记录了最新的id
var latestId int64
for {
var result []*ModelInfo
err := db.Where(...).Where("id > ?", latestId).Order("id").Limit(10).Find(&result).Error()
// ignore error judge
if len(result) == 0 {
break
}
for _, r := range result {
.......
latestId = result.Id
}
}

我想知道哪个是最好的?请帮助我,非常感谢。

您应该使用偏移方法。 也按 ID 排序。

var page int
for {
var result []*ModelInfo
db.Model(&model{}).Where(...).Offset(10 * page).Limit(10).Order("id").Find(&result).Error()
if len(result) == 0 {
break
}
page++
for _, r := range result {
.......
latestId = result.Id
}
}

最新更新