diff --git a/models/issues/issue_user.go b/models/issues/issue_user.go
index d053b1d54..24bb74648 100644
--- a/models/issues/issue_user.go
+++ b/models/issues/issue_user.go
@@ -15,7 +15,7 @@ import (
 type IssueUser struct {
 	ID          int64 `xorm:"pk autoincr"`
 	UID         int64 `xorm:"INDEX"` // User ID.
-	IssueID     int64
+	IssueID     int64 `xorm:"INDEX"`
 	IsRead      bool
 	IsMentioned bool
 }
diff --git a/models/migrations/migrations.go b/models/migrations/migrations.go
index 3524077ea..38fff37be 100644
--- a/models/migrations/migrations.go
+++ b/models/migrations/migrations.go
@@ -534,6 +534,8 @@ var migrations = []Migration{
 	NewMigration("Add ScheduleID for ActionRun", v1_21.AddScheduleIDForActionRun),
 	// v276 -> v277
 	NewMigration("Add RemoteAddress to mirrors", v1_21.AddRemoteAddressToMirrors),
+	// v277 -> v278
+	NewMigration("Add Index to issue_user.issue_id", v1_21.AddIndexToIssueUserIssueID),
 }
 
 // GetCurrentDBVersion returns the current db version
diff --git a/models/migrations/v1_21/v277.go b/models/migrations/v1_21/v277.go
new file mode 100644
index 000000000..12529160b
--- /dev/null
+++ b/models/migrations/v1_21/v277.go
@@ -0,0 +1,16 @@
+// Copyright 2023 The Gitea Authors. All rights reserved.
+// SPDX-License-Identifier: MIT
+
+package v1_21 //nolint
+
+import (
+	"xorm.io/xorm"
+)
+
+func AddIndexToIssueUserIssueID(x *xorm.Engine) error {
+	type IssueUser struct {
+		IssueID int64 `xorm:"INDEX"`
+	}
+
+	return x.Sync(new(IssueUser))
+}