From: Jessica Tallon Date: Thu, 17 Jul 2014 13:58:24 +0000 (+0100) Subject: Fix #894 - index User.username field X-Git-Url: https://vcs.fsf.org/?a=commitdiff_plain;h=892eed590fb30131ea2e8612da5ba22fa24f690c;p=mediagoblin.git Fix #894 - index User.username field This commit sponsored by Emily O'Leary. Thank you! --- diff --git a/mediagoblin/db/migrations.py b/mediagoblin/db/migrations.py index 8e0b5096..59aec4d2 100644 --- a/mediagoblin/db/migrations.py +++ b/mediagoblin/db/migrations.py @@ -19,7 +19,7 @@ import uuid from sqlalchemy import (MetaData, Table, Column, Boolean, SmallInteger, Integer, Unicode, UnicodeText, DateTime, - ForeignKey, Date) + ForeignKey, Date, Index) from sqlalchemy.exc import ProgrammingError from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.sql import and_ @@ -789,3 +789,17 @@ def fix_privilege_user_association_table(db): privilege_user_assoc.c.core__privilege_id.alter(name="user") db.commit() + +@RegisterMigration(22, MIGRATIONS) +def add_index_username_field(db): + """ + This indexes the User.username field which is frequently queried + for example a user logging in. This solves the issue #894 + """ + metadata = MetaData(bind=db.bind) + user_table = inspect_table(metadata, "core__users") + + new_index = Index("ix_core__users_uploader", user_table.c.username) + new_index.create() + + db.commit() diff --git a/mediagoblin/db/models.py b/mediagoblin/db/models.py index e388bd5b..643d5d41 100644 --- a/mediagoblin/db/models.py +++ b/mediagoblin/db/models.py @@ -57,7 +57,7 @@ class User(Base, UserMixin): __tablename__ = "core__users" id = Column(Integer, primary_key=True) - username = Column(Unicode, nullable=False, unique=True) + username = Column(Unicode, nullable=False, unique=True, index=True) # Note: no db uniqueness constraint on email because it's not # reliable (many email systems case insensitive despite against # the RFC) and because it would be a mess to implement at this