From b958dba1a0f84b986acdb82a6609d70d98140640 Mon Sep 17 00:00:00 2001 From: Zettat123 Date: Fri, 24 Mar 2023 23:44:33 +0800 Subject: [PATCH] Improve indices for `action` table (#23532) Close #21611 Add the index mentioned in https://github.com/go-gitea/gitea/issues/21611#issuecomment-1451113252 . Since we already have an index for `("created_unix", "user_id", "is_deleted")` columns on PostgreSQL, I removed the database type check to apply this index to all types of databases. --- models/activities/action.go | 10 +++----- models/migrations/migrations.go | 2 ++ models/migrations/v1_20/v249.go | 45 +++++++++++++++++++++++++++++++++ 3 files changed, 51 insertions(+), 6 deletions(-) create mode 100644 models/migrations/v1_20/v249.go diff --git a/models/activities/action.go b/models/activities/action.go index c1d17517baf..4111d8098b8 100644 --- a/models/activities/action.go +++ b/models/activities/action.go @@ -98,12 +98,10 @@ func (a *Action) TableIndices() []*schemas.Index { actUserIndex := schemas.NewIndex("au_r_c_u_d", schemas.IndexType) actUserIndex.AddColumn("act_user_id", "repo_id", "created_unix", "user_id", "is_deleted") - indices := []*schemas.Index{actUserIndex, repoIndex} - if setting.Database.Type.IsPostgreSQL() { - cudIndex := schemas.NewIndex("c_u_d", schemas.IndexType) - cudIndex.AddColumn("created_unix", "user_id", "is_deleted") - indices = append(indices, cudIndex) - } + cudIndex := schemas.NewIndex("c_u_d", schemas.IndexType) + cudIndex.AddColumn("created_unix", "user_id", "is_deleted") + + indices := []*schemas.Index{actUserIndex, repoIndex, cudIndex} return indices } diff --git a/models/migrations/migrations.go b/models/migrations/migrations.go index 6224e1c8d7c..bec406f7bf6 100644 --- a/models/migrations/migrations.go +++ b/models/migrations/migrations.go @@ -475,6 +475,8 @@ var migrations = []Migration{ NewMigration("Fix incorrect project type", v1_20.FixIncorrectProjectType), // v248 -> v249 NewMigration("Add version column to action_runner table", v1_20.AddVersionToActionRunner), + // v249 -> v250 + NewMigration("Improve Action table indices v3", v1_20.ImproveActionTableIndices), } // GetCurrentDBVersion returns the current db version diff --git a/models/migrations/v1_20/v249.go b/models/migrations/v1_20/v249.go new file mode 100644 index 00000000000..02951a74d6d --- /dev/null +++ b/models/migrations/v1_20/v249.go @@ -0,0 +1,45 @@ +// Copyright 2023 The Gitea Authors. All rights reserved. +// SPDX-License-Identifier: MIT + +package v1_20 //nolint + +import ( + "code.gitea.io/gitea/modules/timeutil" + + "xorm.io/xorm" + "xorm.io/xorm/schemas" +) + +type Action struct { + UserID int64 // Receiver user id. + ActUserID int64 // Action user id. + RepoID int64 + IsDeleted bool `xorm:"NOT NULL DEFAULT false"` + IsPrivate bool `xorm:"NOT NULL DEFAULT false"` + CreatedUnix timeutil.TimeStamp `xorm:"created"` +} + +// TableName sets the name of this table +func (a *Action) TableName() string { + return "action" +} + +// TableIndices implements xorm's TableIndices interface +func (a *Action) TableIndices() []*schemas.Index { + repoIndex := schemas.NewIndex("r_u_d", schemas.IndexType) + repoIndex.AddColumn("repo_id", "user_id", "is_deleted") + + actUserIndex := schemas.NewIndex("au_r_c_u_d", schemas.IndexType) + actUserIndex.AddColumn("act_user_id", "repo_id", "created_unix", "user_id", "is_deleted") + + cudIndex := schemas.NewIndex("c_u_d", schemas.IndexType) + cudIndex.AddColumn("created_unix", "user_id", "is_deleted") + + indices := []*schemas.Index{actUserIndex, repoIndex, cudIndex} + + return indices +} + +func ImproveActionTableIndices(x *xorm.Engine) error { + return x.Sync(new(Action)) +}