Python PostgreSQL查询速度慢,什么';问题是什么?
我正在尝试使用Python Django将一些度量数据存储到我的postgresql数据库中。 到目前为止一切顺利,我用django制作了一个docker容器,用postgresql server制作了另一个容器。 然而,我的度量表中有将近2百万行,查询开始变得非常慢,虽然我不确定为什么,但我没有进行非常激烈的查询 这个问题Python PostgreSQL查询速度慢,什么';问题是什么?,python,django,performance,postgresql,Python,Django,Performance,Postgresql,我正在尝试使用Python Django将一些度量数据存储到我的postgresql数据库中。 到目前为止一切顺利,我用django制作了一个docker容器,用postgresql server制作了另一个容器。 然而,我的度量表中有将近2百万行,查询开始变得非常慢,虽然我不确定为什么,但我没有进行非常激烈的查询 这个问题 SELECT ••• FROM "measurement" WHERE "measurement"."device_id" = 26 ORDER BY "measureme
SELECT ••• FROM "measurement" WHERE "measurement"."device_id" = 26 ORDER BY "measurement"."measure_timestamp" DESC LIMIT 20
例如,根据我查询的设备,运行需要3到5秒
我希望它运行得更快,因为我没有做任何花哨的事情。
测量表
id INTEGER
measure_timestamp TIMESTAMP WITH TIMEZONE
sensor_height INTEGER
device_id INTEGER
在id和measure_时间戳上具有索引。
服务器看起来并不太忙,尽管只有512M内存,但在查询过程中我还有很多剩余内存
我将postgresql server配置为共享缓冲区=256MB,工作内存=128MB。
数据库的总容量略低于100MB,因此应该很容易安装。
如果我在PgAdmin中运行查询,我会看到很多块i/O,因此我怀疑它必须从磁盘读取,这显然很慢
谁能给我一些正确方向的建议,如何找到问题
编辑:
添加了查询上解释分析的输出。我现在在设备id上添加了索引,这很有帮助,但我希望查询速度更快。
您是否有关于
测量时间戳和设备id的信息?如果查询总是采用这种形式,您可能也会喜欢。您是否有关于测量时间戳和设备id的信息?如果查询总是采用这种形式,您可能也会喜欢。请查看表的分发键。数据可能是稀疏填充的,因此会影响性能。当您有2M记录的数据时,选择合适的分发密钥非常重要。有关更多详细信息,请阅读此请查看表的分发键。数据可能是稀疏填充的,因此会影响性能。当您有2M记录的数据时,选择合适的分发密钥非常重要。有关更多详细信息,请阅读此在查询中运行解释(分析、缓冲)
,并将结果添加到问题中。这将有助于给出一个不仅仅基于猜测的答案。另外:将表定义添加到问题中,包括PK FK和索引。对查询运行EXPLAIN(ANALYZE,BUFFERS)
,并将结果添加到问题中。这将有助于给出一个不仅仅基于猜测的答案。另外:将表定义添加到问题中,包括PK FK和索引。还有一些数据的描述,比如基数。我想我做了,但显然不是在设备id上,所以我修复了它,它帮助了很多,但我还没有,我认为它可以快得多。你的查询按描述顺序进行。你想试着用同样的方式创建索引吗?这就成功了,再加上答案中提到的其他事情。我不知道索引是“单向的”,我可以将它们按降序索引。查询时间从5秒变为22毫秒。谢谢很高兴知道这一点。如果有帮助的话,你可以投票支持我的评论。谢谢。我想我做了,但显然不是在设备id上,所以我修复了它,它帮助了很多,但我还没有,我想它可以快很多。您的查询按desc排序。您想尝试以同样的方式创建索引吗?这就成功了,再加上答案中提到的其他事情。我不知道索引是“单向的”,我可以将它们按降序索引。查询时间从5秒变为22毫秒。谢谢很高兴知道这一点。如果有帮助的话,你可以投票支持我的评论。谢谢