我有一个烧瓶应用程序:
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上添加索引?
答案 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)
优化器将使用索引来减少查询的行查找。
这会加快您的查询速度。