查询一个大的Postgres相关表
我有一个大的Postgres表(150GB +),它在两个变量val1和val2之间存储一个大的相关矩阵。例如:查询一个大的Postgres相关表
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)
我不知道如何加快查询。
回答:
在执行导致超时的任何其他操作之前,您可能需要清理陈旧的缓存数据。
第一式:
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
以上是 查询一个大的Postgres相关表 的全部内容, 来源链接: utcz.com/qa/266530.html