小编Tos*_*osh的帖子

带order_by和分页的Flask-SqlAlchemy查询非常慢

我使用Python = 2.7.3,PostgreSQL = 9.3,Flask = 0.10.0,SQLAlchemy = 1.10.12,Flask-SQLAlchemy = 2.1和psycopg2 = 2.5.4

我在PostgreSQL中有一个10亿个记录表,我必须对它进行分页并在其中进行搜索:

class MyTable(db.Model):
    """ My Table """
    id = db.Column(db.Integer, primary_key=True)
    code = db.Column(db.String(100), index=True, unique=True)
    name = db.Column(db.String(512), index=True)
    __tablename__ = 'my_table'
Run Code Online (Sandbox Code Playgroud)

所以我在请求数据的代码中做了以下操作:

records = MyTable.query.filter(**filter_list).\
    order_by(asc('code')).paginate(page, per_page, False)
Run Code Online (Sandbox Code Playgroud)

关键是,如果per_page = 10和page = 1158960,即使根本没有过滤,也只需要花13秒就可以为最后一页选择10条最后一条记录。

从我在flask- sqlalchemy来源中发现的内容中,.paginate如下所示:

.order_by(asc('code')).limit(per_page).offset((page - 1) * per_page)
Run Code Online (Sandbox Code Playgroud)

产生的SQL查询如下所示:

SELECT my_table.id, my_table.code, my_table.name 
FROM my_table ORDER BY my_table.code ASC 
LIMIT 10 OFFSET …
Run Code Online (Sandbox Code Playgroud)

postgresql pagination sqlalchemy sql-order-by flask

5
推荐指数
1
解决办法
2924
查看次数

标签 统计

flask ×1

pagination ×1

postgresql ×1

sql-order-by ×1

sqlalchemy ×1