diff --git a/models/activities/action.go b/models/activities/action.go
index c1d17517ba..4111d8098b 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 6224e1c8d7..bec406f7bf 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 0000000000..02951a74d6
--- /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))
+}