如何提高查询性能以从postgress中选择信息?

时间:2017-03-14 10:31:27

标签: python performance postgresql

我有一个烧瓶应用程序:

db = SQLAlchemy(app)
@app.route('/')
def home():
    query = "SELECT door_id FROM table WHERE id = 2422628557;"
    result = db.session.execute(query)
    return json.dumps([dict(r) for r in result])

执行时:curl http://127.0.0.1:5000/

我很快就得到了结果[{"door_id": 2063805}]

但是,当我撤消查询时:query = "SELECT id FROM table WHERE door_id = 2063805;" 一切都非常缓慢。

我可能在id属性上有索引,而在door_id上没有这样的索引。 如何提高性能?如何在door_id上添加索引?

2 个答案:

答案 0 :(得分:1)

如果您想要该列的索引,只需创建它:

create index i1 on table (door_id)

然后,根据您的设置,您可能需要对其进行分析以向查询规划器介绍,例如:

analyze table;

请记住 - 所有索引都需要额外的数据操作IO

答案 1 :(得分:0)

查看查询的解释计划。

EXPLAIN 
"SELECT door_id FROM table WHERE id = 2422628557;"

很可能你会看到这样的事情:

                         QUERY PLAN
------------------------------------------------------------
 Seq Scan on table (cost=0.00..483.00 rows=99999 width=244)
   Filter: (id = 2422628557)

Seq Scan正在检查此表中的每一行,然后按照您要限制的ID进行过滤。

在这种情况下,您应该做的是向ID列添加索引。 该计划将改为:

                                QUERY PLAN
 -----------------------------------------------------------------------------
 Index Scan using [INDEX_NAME] on table  (cost=0.00..8.27 rows=1 width=244)
   Index Cond: (id = 2422628557)

优化器将使用索引来减少查询的行查找。

这会加快您的查询速度。