Горм чрезвычайно медленный - PullRequest
1 голос
/ 20 февраля 2020

Горм кажется слишком медленным.

type Ad struct {
    AdId        string `json:"adId" gorm:"column:adId"`
    Attributes  string `json:"attributes" gorm:"column:attributes"`
    Title       string `json:"title" gorm:"column:title"`
    Description string `json:"description" gorm:"column:description"`
    Image       string `json:"image" gorm:"column:image"`
    Url         string `json:"url" gorm:"column:url"`
    Price       int    `json:"price" gorm:"column:price"`
    Address    string    `json:"address" gorm:"column:address"`
    Latitude   float64   `json:"latitude" gorm:"column:latitude"`
    Longitude  float64   `json:"longitude" gorm:"column:longitude"`
    PostedDate time.Time `json:"postedDate" gorm:"column:postedDate"`
}

db.Table("Kijiji").Find(&listing).Where("adId = ?", m["id"][0])

В последний раз запрос занимает почти 60 секунд. Принимая во внимание, что если бы я использовал «database / sql» mysql.QueryRow() меньше 500 мс.

Есть идеи почему?

Обновление:

Замедление происходит в этом callback_query.go Похоже, что эта функция проходит по всей таблице из 20 тыс. Записей.

func queryCallback(scope *Scope) {
    ..........
        if rows, err := scope.SQLDB().Query(scope.SQL, scope.SQLVars...); scope.Err(err) == nil {
            defer rows.Close()
            columns, _ := rows.Columns()
            for rows.Next() {
                scope.db.RowsAffected++

                elem := results
                if isSlice {
                    elem = reflect.New(resultType).Elem()
                }
                scope.scan(rows, columns, scope.New(elem.Addr().Interface()).Fields())
            ..................
        }
    }
}

Как мне это исправить?

1 Ответ

2 голосов
/ 20 февраля 2020

Ты сделал это задом наперед. Find выполняет запрос и выбирает строки. Вы хотели db.Table("Kijiji").Where("adId = ?", m["id"][0]).Find(&listing) применить условие where перед извлечением всего.

...