小编Jon*_*han的帖子

索引以提高范围查询的性能

我在 Postgres 8.2 数据库中有一个与此类似的关系:

CREATE TABLE foo (
    foo_id varchar(160) NOT NULL,
    bar_id varchar(160) NOT NULL,
    created bigint NOT NULL,
    PRIMARY KEY (foo_id, bar_id)
);
Run Code Online (Sandbox Code Playgroud)

让我们暂时搁置 PK 是复合的并使用 varchars(不是我的选择,遗留产品等)这一事实。

目前,我们的应用程序从不发出包含created在 WHERE 子句中的查询,因此它没有被索引。但是,我们有一个新要求,要求我们查询一系列created值。建议的查询是这样的:

SELECT * FROM foo WHERE foo_id IN (...) AND created > 1234 AND created <= 6789
Run Code Online (Sandbox Code Playgroud)

foo表在我们的应用程序中很容易成为最大的,但即便如此,即使在最大的部署中也很可能少于 50,000 行,并且很少有超过十多行具有相同的foo_id.

我的问题是,created考虑foo_id到 PK 的一部分,是否应该在列上添加索引?如果是这样,仅对created列进行索引还是对 ( foo_id, created)进行索引有意义吗?

我对上述语句的 EXPLAIN 显示正在使用 PK,然后正在应用 FILTER 操作。使用测试数据,性能似乎不错。如果表增长到很大,我担心的是性能。

谢谢!

postgresql performance index

6
推荐指数
1
解决办法
2145
查看次数

标签 统计

index ×1

performance ×1

postgresql ×1