MM-45956: Optimize FileInfo stats query (#22603)
* MM-45956: Optimize FileInfo stats query We Denormalize Post.ChannelId on FileInfo.ChannelId ```release-note The file info stats query is now optimized by denormalizing the channelID column into the table itself. This will speed up the query to get the file count for a channel on clicking the RHS. Migration times: On a MySQL 8.0.31 DB with 1405 rows in FileInfo and 11M posts, it took around 0.3s On a Postgres 12.14 DB with 1731 rows in FileInfo and 11M posts, it took around 0.27s ``` https://mattermost.atlassian.net/browse/MM-45956
Этот коммит содержится в:
коммит произвёл
GitHub
родитель
1edbde8aa3
Коммит
56b18ca7bf
@@ -115,7 +115,7 @@ func createEmoji(ss store.Store, userId string) *model.Emoji {
|
||||
return emoji
|
||||
}
|
||||
|
||||
func createFileInfo(ss store.Store, postId, userId string) *model.FileInfo {
|
||||
func createFileInfo(ss store.Store, postId, channelId, userId string) *model.FileInfo {
|
||||
m := model.FileInfo{}
|
||||
m.PostId = postId
|
||||
m.CreatorId = userId
|
||||
@@ -623,7 +623,7 @@ func TestCheckPostsFileInfoIntegrity(t *testing.T) {
|
||||
|
||||
t.Run("should generate a report with one record", func(t *testing.T) {
|
||||
postId := model.NewId()
|
||||
info := createFileInfo(ss, postId, model.NewId())
|
||||
info := createFileInfo(ss, postId, model.NewId(), model.NewId())
|
||||
result := checkPostsFileInfoIntegrity(store)
|
||||
require.NoError(t, result.Err)
|
||||
data := result.Data.(model.RelationalIntegrityCheckData)
|
||||
@@ -1226,7 +1226,7 @@ func TestCheckUsersFileInfoIntegrity(t *testing.T) {
|
||||
t.Run("should generate a report with one record", func(t *testing.T) {
|
||||
user := createUser(ss)
|
||||
userId := user.Id
|
||||
info := createFileInfo(ss, model.NewId(), userId)
|
||||
info := createFileInfo(ss, model.NewId(), model.NewId(), userId)
|
||||
dbmap.Exec(`DELETE FROM Users WHERE Id=?`, user.Id)
|
||||
result := checkUsersFileInfoIntegrity(store)
|
||||
require.NoError(t, result.Err)
|
||||
|
||||
Ссылка в новой задаче
Block a user