illmaticindustries / isucon13

0 stars 0 forks source link

fillLivestreamResponse のqueryが遅い。 #20

Open n-miyamoto opened 11 months ago

n-miyamoto commented 11 months ago

わかりやすい N+1

    var livestreamTagModels []*LivestreamTagModel
    if err := tx.SelectContext(ctx, &livestreamTagModels, "SELECT * FROM livestream_tags WHERE livestream_id = ?", livestreamModel.ID); err != nil {
        return Livestream{}, err
    }

    tags := make([]Tag, len(livestreamTagModels))
    for i := range livestreamTagModels {
        tagModel := TagModel{}
        if err := tx.GetContext(ctx, &tagModel, "SELECT * FROM tags WHERE id = ?", livestreamTagModels[i].TagID); err != nil {
            return Livestream{}, err
        }

        tags[i] = Tag{
            ID:   tagModel.ID,
            Name: tagModel.Name,
        }
    }