查询大型Postgres关联表

时间:2017-12-27 17:08:44

标签: postgresql

我有一个大的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)

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

1 个答案:

答案 0 :(得分: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