From 255a7e085a560c6c4b9b92c2815398fb9edba049 Mon Sep 17 00:00:00 2001 From: Son NK <> Date: Wed, 2 Dec 2020 17:32:42 +0100 Subject: [PATCH] add index on user_id, mailbox_id, ... if possible --- app/models.py | 34 +++++++++----- .../versions/2020_120217_56c790ec8ab4_.py | 47 +++++++++++++++++++ 2 files changed, 69 insertions(+), 12 deletions(-) create mode 100644 migrations/versions/2020_120217_56c790ec8ab4_.py diff --git a/app/models.py b/app/models.py index 7950329f..5a9c723d 100644 --- a/app/models.py +++ b/app/models.py @@ -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) diff --git a/migrations/versions/2020_120217_56c790ec8ab4_.py b/migrations/versions/2020_120217_56c790ec8ab4_.py new file mode 100644 index 00000000..f5945b17 --- /dev/null +++ b/migrations/versions/2020_120217_56c790ec8ab4_.py @@ -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 ###