Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python PostgreSQL查询速度慢,什么';问题是什么?_Python_Django_Performance_Postgresql - Fatal编程技术网

Python PostgreSQL查询速度慢,什么';问题是什么?

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

我正在尝试使用Python Django将一些度量数据存储到我的postgresql数据库中。 到目前为止一切顺利,我用django制作了一个docker容器,用postgresql server制作了另一个容器。 然而,我的度量表中有将近2百万行,查询开始变得非常慢,虽然我不确定为什么,但我没有进行非常激烈的查询

这个问题

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毫秒。谢谢很高兴知道这一点。如果有帮助的话,你可以投票支持我的评论。谢谢