Fix #894 - index User.username field

This commit sponsored by Emily O'Leary.  Thank you!
This commit is contained in:
Jessica Tallon 2014-07-17 14:58:24 +01:00 committed by Christopher Allan Webber
parent ffbf9c8b43
commit 892eed590f
2 changed files with 16 additions and 2 deletions

View File

@ -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()

View File

@ -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