Skip to content

Commit

Permalink
fillLivestreamResponseBulkのlivestreamのN+1解消
Browse files Browse the repository at this point in the history
  • Loading branch information
sor4chi committed Nov 25, 2023
1 parent ebff290 commit 52d7032
Showing 1 changed file with 22 additions and 4 deletions.
26 changes: 22 additions & 4 deletions go/livestream_handler.go
Expand Up @@ -573,14 +573,32 @@ func fillLivestreamResponseBulk(ctx context.Context, tx *sqlx.Tx, livestreamMode
userMap[user.ID] = user
}

var allLivestreamTagModels []*LivestreamTagModel
livestreamIDs := make([]int64, len(livestreamModels))
for i := range livestreamModels {
livestreamModel := livestreamModels[i]
owner := userMap[livestreamModel.UserID]
livestreamIDs[i] = livestreamModels[i].ID
}
livestreamTagModelsMap := make(map[int64][]*LivestreamTagModel)

var livestreamTagModels []*LivestreamTagModel
if err := tx.SelectContext(ctx, &livestreamTagModels, "SELECT * FROM livestream_tags WHERE livestream_id = ?", livestreamModel.ID); err != nil {
if len(livestreamIDs) > 0 {
query, params, err := sqlx.In("SELECT * FROM livestream_tags WHERE livestream_id IN (?)", livestreamIDs)
if err != nil {
return []Livestream{}, err
}
if err := tx.SelectContext(ctx, &allLivestreamTagModels, query, params...); err != nil {
return []Livestream{}, err
}

for i := range allLivestreamTagModels {
livestreamTagModel := allLivestreamTagModels[i]
livestreamTagModelsMap[livestreamTagModel.LivestreamID] = append(livestreamTagModelsMap[livestreamTagModel.LivestreamID], livestreamTagModel)
}
}

for i := range livestreamModels {
livestreamModel := livestreamModels[i]
owner := userMap[livestreamModel.UserID]
livestreamTagModels := livestreamTagModelsMap[livestreamModel.ID]

tagIDs := make([]int64, len(livestreamTagModels))
for i := range livestreamTagModels {
Expand Down

0 comments on commit 52d7032

Please sign in to comment.