查询一个大的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

回到顶部