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

2024-04-18 04:55:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个烧瓶应用程序:

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\u id上没有这样的索引。 如何提高绩效?如何在门牌号上添加索引?你知道吗


Tags: fromidapp应用程序db烧瓶sqlalchemydef
2条回答

看看你的问题的解释计划。你知道吗

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扫描检查这个表中的每一行,然后根据您限制的id进行过滤。你知道吗

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

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

优化程序将使用索引来减少查询的行查找。你知道吗

这将加快您的查询速度。你知道吗

如果要在该列上建立索引,只需创建它:

create index i1 on table (door_id)

然后根据您的设置,您可能需要对其进行分析,以便将其介绍给query planner,例如:

analyze table;

请记住—所有索引都需要额外的IO来处理数据

相关问题 更多 >