2016-09-21 19 views
1

た後、私は100,000件のエントリを持っており、それが速度を向上させることができる方法を見てデータベースで作業インデックスの簡単な例を取得しようとしています。表は次のようなものになります。混乱テーブル作成

user = Table('user', metadata, 
    Column('id', Integer, primary_key=True), 
    Column('first_name', String(16), nullable=False), 
    Column('last_name', String(16), nullable=False), 
    Column('age', Integer, nullable=False), 
    Column('joined_at', DateTime(), nullable=False, index=True), 
) 

を私は、キー「FIRST_NAME」、「LAST_NAME」、「時代」を持つユーザーのキー/値の辞書を与えられていますし、「joined_at」クエリは次のようになります。

q = session.query(UserTable).filter(and_(
     UserTable.first_name == user['first_name'], 
     UserTable.last_name == user['last_name'], 
     UserTable.age == user['age'], 
     UserTable.joined_at == user['joined_at'])) 

私だけにjoined_atための新たな指標に)(構文が適切に作成使用するかと思ったテーブルが作成された後にインデックスが追加されましたので、[「joined_at」]ユーザーと同じ日時であるjoined_atの列を見て

+0

すでに列定義に索引があります。他に何もする必要はありません。どうしたの? – davidism

+0

ああ、それが使用されていたかどうか、またはパフォーマンスの時間が実際には変更されていないため、何かが不足していたかどうかはわかりませんでした –

+0

MySQLデータベースでその列のインデックスが表示されますか?以前の定義に基づいてデータベースを作成した後に 'index = True'を追加しましたか?その場合は、モデルの変更を適用するために移行を実行する必要があります。 http://alembic.zzzcomputing.com/en/latest/ – davidism

答えて

0

インデックスSQLにおけるので、SQLAlchemyの中には、シーンの後ろに起こります。

インデックスは、基礎となるSQLエンジンの機能であり、パフォーマンスの向上を利用するために特別なクエリを必要としません。単なる定義で十分です。