add index on user_id, mailbox_id, ... if possible

This commit is contained in:
Son NK 2020-12-02 17:32:42 +01:00
parent 81f9f9f41b
commit 255a7e085a
2 changed files with 69 additions and 12 deletions

View File

@ -871,9 +871,9 @@ def generate_email(
class Alias(db.Model, ModelMixin):
"""Alias"""
user_id = db.Column(db.ForeignKey(User.id, ondelete="cascade"), nullable=False)
user_id = db.Column(
db.ForeignKey(User.id, ondelete="cascade"), nullable=False, index=True
)
email = db.Column(db.String(128), unique=True, nullable=False)
# the name to use when user replies/sends from alias
@ -901,7 +901,7 @@ class Alias(db.Model, ModelMixin):
# an alias can be owned by another mailbox
mailbox_id = db.Column(
db.ForeignKey("mailbox.id", ondelete="cascade"), nullable=False
db.ForeignKey("mailbox.id", ondelete="cascade"), nullable=False, index=True
)
# prefix _ to avoid this object being used accidentally.
@ -1169,8 +1169,12 @@ class Contact(db.Model, ModelMixin):
db.UniqueConstraint("alias_id", "website_email", name="uq_contact"),
)
user_id = db.Column(db.ForeignKey(User.id, ondelete="cascade"), nullable=False)
alias_id = db.Column(db.ForeignKey(Alias.id, ondelete="cascade"), nullable=False)
user_id = db.Column(
db.ForeignKey(User.id, ondelete="cascade"), nullable=False, index=True
)
alias_id = db.Column(
db.ForeignKey(Alias.id, ondelete="cascade"), nullable=False, index=True
)
name = db.Column(
db.String(512), nullable=True, default=None, server_default=text("NULL")
@ -1310,9 +1314,11 @@ class Contact(db.Model, ModelMixin):
class EmailLog(db.Model, ModelMixin):
user_id = db.Column(db.ForeignKey(User.id, ondelete="cascade"), nullable=False)
user_id = db.Column(
db.ForeignKey(User.id, ondelete="cascade"), nullable=False, index=True
)
contact_id = db.Column(
db.ForeignKey(Contact.id, ondelete="cascade"), nullable=False
db.ForeignKey(Contact.id, ondelete="cascade"), nullable=False, index=True
)
# whether this is a reply
@ -1660,8 +1666,10 @@ class Job(db.Model, ModelMixin):
class Mailbox(db.Model, ModelMixin):
user_id = db.Column(db.ForeignKey(User.id, ondelete="cascade"), nullable=False)
email = db.Column(db.String(256), nullable=False)
user_id = db.Column(
db.ForeignKey(User.id, ondelete="cascade"), nullable=False, index=True
)
email = db.Column(db.String(256), nullable=False, index=True)
verified = db.Column(db.Boolean, default=False, nullable=False)
force_spf = db.Column(db.Boolean, default=True, server_default="1", nullable=False)
@ -1831,9 +1839,11 @@ class AliasMailbox(db.Model, ModelMixin):
db.UniqueConstraint("alias_id", "mailbox_id", name="uq_alias_mailbox"),
)
alias_id = db.Column(db.ForeignKey(Alias.id, ondelete="cascade"), nullable=False)
alias_id = db.Column(
db.ForeignKey(Alias.id, ondelete="cascade"), nullable=False, index=True
)
mailbox_id = db.Column(
db.ForeignKey(Mailbox.id, ondelete="cascade"), nullable=False
db.ForeignKey(Mailbox.id, ondelete="cascade"), nullable=False, index=True
)
alias = db.relationship(Alias)

View File

@ -0,0 +1,47 @@
"""empty message
Revision ID: 56c790ec8ab4
Revises: 623662ea0e7e
Create Date: 2020-12-02 17:32:23.332830
"""
import sqlalchemy_utils
from alembic import op
import sqlalchemy as sa
# revision identifiers, used by Alembic.
revision = '56c790ec8ab4'
down_revision = '623662ea0e7e'
branch_labels = None
depends_on = None
def upgrade():
# ### commands auto generated by Alembic - please adjust! ###
op.create_index(op.f('ix_alias_mailbox_id'), 'alias', ['mailbox_id'], unique=False)
op.create_index(op.f('ix_alias_user_id'), 'alias', ['user_id'], unique=False)
op.create_index(op.f('ix_alias_mailbox_alias_id'), 'alias_mailbox', ['alias_id'], unique=False)
op.create_index(op.f('ix_alias_mailbox_mailbox_id'), 'alias_mailbox', ['mailbox_id'], unique=False)
op.create_index(op.f('ix_contact_alias_id'), 'contact', ['alias_id'], unique=False)
op.create_index(op.f('ix_contact_user_id'), 'contact', ['user_id'], unique=False)
op.create_index(op.f('ix_email_log_contact_id'), 'email_log', ['contact_id'], unique=False)
op.create_index(op.f('ix_email_log_user_id'), 'email_log', ['user_id'], unique=False)
op.create_index(op.f('ix_mailbox_email'), 'mailbox', ['email'], unique=False)
op.create_index(op.f('ix_mailbox_user_id'), 'mailbox', ['user_id'], unique=False)
# ### end Alembic commands ###
def downgrade():
# ### commands auto generated by Alembic - please adjust! ###
op.drop_index(op.f('ix_mailbox_user_id'), table_name='mailbox')
op.drop_index(op.f('ix_mailbox_email'), table_name='mailbox')
op.drop_index(op.f('ix_email_log_user_id'), table_name='email_log')
op.drop_index(op.f('ix_email_log_contact_id'), table_name='email_log')
op.drop_index(op.f('ix_contact_user_id'), table_name='contact')
op.drop_index(op.f('ix_contact_alias_id'), table_name='contact')
op.drop_index(op.f('ix_alias_mailbox_mailbox_id'), table_name='alias_mailbox')
op.drop_index(op.f('ix_alias_mailbox_alias_id'), table_name='alias_mailbox')
op.drop_index(op.f('ix_alias_user_id'), table_name='alias')
op.drop_index(op.f('ix_alias_mailbox_id'), table_name='alias')
# ### end Alembic commands ###