]> source.dussan.org Git - gitea.git/commitdiff
Add new index for action to resolve the performance problem (#32333)
authorLunny Xiao <xiaolunwen@gmail.com>
Wed, 6 Nov 2024 22:04:48 +0000 (14:04 -0800)
committerGitHub <noreply@github.com>
Wed, 6 Nov 2024 22:04:48 +0000 (22:04 +0000)
Fix #32224

models/activities/action.go
models/migrations/migrations.go
models/migrations/v1_23/v308.go [new file with mode: 0644]

index 9b4ffd7725c4e000cd795af51607ba659c3d6d15..c83dba9d4697b7208db346b87883a179bb7d905e 100644 (file)
@@ -171,7 +171,10 @@ func (a *Action) TableIndices() []*schemas.Index {
        cudIndex := schemas.NewIndex("c_u_d", schemas.IndexType)
        cudIndex.AddColumn("created_unix", "user_id", "is_deleted")
 
-       indices := []*schemas.Index{actUserIndex, repoIndex, cudIndex}
+       cuIndex := schemas.NewIndex("c_u", schemas.IndexType)
+       cuIndex.AddColumn("user_id", "is_deleted")
+
+       indices := []*schemas.Index{actUserIndex, repoIndex, cudIndex, cuIndex}
 
        return indices
 }
index 41f337b838ad6826366728eccb43abe31722b0c1..0333e7e204aad5bcf8a44c0e253618afedcc86aa 100644 (file)
@@ -365,6 +365,7 @@ func prepareMigrationTasks() []*migration {
                newMigration(305, "Add Repository Licenses", v1_23.AddRepositoryLicenses),
                newMigration(306, "Add BlockAdminMergeOverride to ProtectedBranch", v1_23.AddBlockAdminMergeOverrideBranchProtection),
                newMigration(307, "Fix milestone deadline_unix when there is no due date", v1_23.FixMilestoneNoDueDate),
+               newMigration(308, "Add index(user_id, is_deleted) for action table", v1_23.AddNewIndexForUserDashboard),
        }
        return preparedMigrations
 }
diff --git a/models/migrations/v1_23/v308.go b/models/migrations/v1_23/v308.go
new file mode 100644 (file)
index 0000000..1e8a9b0
--- /dev/null
@@ -0,0 +1,52 @@
+// Copyright 2024 The Gitea Authors. All rights reserved.
+// SPDX-License-Identifier: MIT
+
+package v1_23 //nolint
+
+import (
+       "code.gitea.io/gitea/modules/timeutil"
+
+       "xorm.io/xorm"
+       "xorm.io/xorm/schemas"
+)
+
+type improveActionTableIndicesAction struct {
+       ID          int64 `xorm:"pk autoincr"`
+       UserID      int64 `xorm:"INDEX"` // Receiver user id.
+       OpType      int
+       ActUserID   int64 // Action user id.
+       RepoID      int64
+       CommentID   int64 `xorm:"INDEX"`
+       IsDeleted   bool  `xorm:"NOT NULL DEFAULT false"`
+       RefName     string
+       IsPrivate   bool               `xorm:"NOT NULL DEFAULT false"`
+       Content     string             `xorm:"TEXT"`
+       CreatedUnix timeutil.TimeStamp `xorm:"created"`
+}
+
+// TableName sets the name of this table
+func (*improveActionTableIndicesAction) TableName() string {
+       return "action"
+}
+
+func (a *improveActionTableIndicesAction) 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")
+
+       cuIndex := schemas.NewIndex("c_u", schemas.IndexType)
+       cuIndex.AddColumn("user_id", "is_deleted")
+
+       indices := []*schemas.Index{actUserIndex, repoIndex, cudIndex, cuIndex}
+
+       return indices
+}
+
+func AddNewIndexForUserDashboard(x *xorm.Engine) error {
+       return x.Sync(new(improveActionTableIndicesAction))
+}