我有一个很大的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)
我不确定如何加快查询速度。
在执行任何其他导致超时的操作之前,您可能需要清理陈旧的缓存数据。
第一类:
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);
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句