查询大型Postgres相关表

kPow989

我有一个很大的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)是表的组合主键。我发现当我在下面运行查询时,查询将在35毫秒内执行。

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)

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

Gokcand

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

第一类:

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索引文档

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章