Skip to content

Commit

Permalink
fix(GODT-3183): Add missing indices
Browse files Browse the repository at this point in the history
Add indices to message flags, mailbox flags, mailbox permanent flags and
mailbox attributes.

Should improve performance in join operation and general lookups.
  • Loading branch information
LBeernaertProton committed Jan 2, 2024
1 parent caaf108 commit 42b5b98
Show file tree
Hide file tree
Showing 2 changed files with 66 additions and 0 deletions.
2 changes: 2 additions & 0 deletions internal/db_impl/sqlite3/migrations.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import (
v0 "github.com/ProtonMail/gluon/internal/db_impl/sqlite3/v0"
v1 "github.com/ProtonMail/gluon/internal/db_impl/sqlite3/v1"
v2 "github.com/ProtonMail/gluon/internal/db_impl/sqlite3/v2"
v3 "github.com/ProtonMail/gluon/internal/db_impl/sqlite3/v3"
"github.com/sirupsen/logrus"
)

Expand All @@ -22,6 +23,7 @@ var migrationList = []Migration{
&v0.Migration{},
&v1.Migration{},
&v2.Migration{},
&v3.Migration{},
}

func RunMigrations(ctx context.Context, tx utils.QueryWrapper, generator imap.UIDValidityGenerator) error {
Expand Down
64 changes: 64 additions & 0 deletions internal/db_impl/sqlite3/v3/migration.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
package v3

import (
"context"
"fmt"

"github.com/ProtonMail/gluon/imap"
"github.com/ProtonMail/gluon/internal/db_impl/sqlite3/utils"
v1 "github.com/ProtonMail/gluon/internal/db_impl/sqlite3/v1"
)

type Migration struct{}

func (m Migration) Run(ctx context.Context, tx utils.QueryWrapper, _ imap.UIDValidityGenerator) error {
{
// Create an index on message id field to speed up lookup queries for message flags.
query := fmt.Sprintf("create index message_flags_message_id_index on %v (%v)",
v1.MessageFlagsTableName,
v1.MessageFlagsFieldMessageID,
)

if _, err := utils.ExecQuery(ctx, tx, query); err != nil {
return fmt.Errorf("failed to create message flags index: %w", err)
}
}

{
// Create an index on message id field to speed up lookup queries for message flags.
query := fmt.Sprintf("create index mailbox_flags_mailbox_id_index on %v (%v)",
v1.MailboxFlagsTableName,
v1.MailboxFlagsFieldMailboxID,
)

if _, err := utils.ExecQuery(ctx, tx, query); err != nil {
return fmt.Errorf("failed to create mailbox flags index : %w", err)
}
}

{
// Create an index on message id field to speed up lookup queries for message flags.
query := fmt.Sprintf("create index mailbox_perm_flags_mailbox_id_index on %v (%v)",
v1.MailboxPermFlagsTableName,
v1.MailboxPermFlagsFieldMailboxID,
)

if _, err := utils.ExecQuery(ctx, tx, query); err != nil {
return fmt.Errorf("failed to create mailbox perm flags index : %w", err)
}
}

{
// Create an index on message id field to speed up lookup queries for message flags.
query := fmt.Sprintf("create index mailbox_attr_mailbox_id_index on %v (%v)",
v1.MailboxAttrsTableName,
v1.MailboxAttrsFieldMailboxID,
)

if _, err := utils.ExecQuery(ctx, tx, query); err != nil {
return fmt.Errorf("failed to create mailbox attr flags index : %w", err)
}
}

return nil
}

0 comments on commit 42b5b98

Please sign in to comment.