查询大型Postgres关联表

问题描述 投票:1回答:1

我有一个大的Postgres表(150gb +),它存储两个变量val1和val2之间的大相关矩阵。例如:

val1   |   val2  |  distance  
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  0    |    1    |     10
  0    |    2    |     21
  0    |    3    |     13
  1    |    2    |     65
  1    |    3    |     43
  2    |    3    |     56

对(val1,val2)是表的复合主键。我发现当我在下面运行查询时,查询在35ms内执行。

SELECT *
FROM sliding_window_distances
WHERE (val1 = 10000)

但是当我使用val2进行搜索时,它不会执行并超时。

SELECT *
FROM sliding_window_distances
WHERE (val2 = 10000)

理想情况下,我想运行下面的查询,以便我拥有特定值的所有记录(在我的示例中为10000)

SELECT *
FROM sliding_window_distances
WHERE (val1 = 10000)
OR (val2 = 10000)

我不确定如何加快查询速度。

postgresql
1个回答
1
投票

在执行导致超时的任何其他操作之前,您可能需要清理过时的缓存数据。

第一种:

VACUUM ANALYZE sliding_window_distances;  

您还应该在表中使用二级索引。创建索引可以显着加快查询操作。

要创建索引而不锁定对表的写入:

CREATE INDEX CONCURRENTLY windows_dist_index ON sliding_window_distances (val2);

您还可以定义其他UNIQUE约束,如下所示:

ALTER TABLE sliding_window_distances ADD UNIQUE (val2, val1);

PostgreSQL Documentation on Indexes

© www.soinside.com 2019 - 2024. All rights reserved.