在具有存储各种值的非唯一列的 postgres 中,是否可以对其进行索引并提高性能?



我收到了大量关于越来越多的用户的数据,这些用户试图进行物理壮举,但随后失去兴趣并离开。每个用户都有一个唯一的 ID。每次尝试都会被赋予一个唯一的 ID。数据以将用户与尝试(rel_user_attempts(相关联的表格的形式流向我。请注意,尝试是分批到达的,但并不总是按时间顺序到达。

rel_user_attempts
-----------------
id (pk)   archived    userid      attemptid (unique)
1         false       152         4001
2         false       152         4002
3         false       152         4003
4         false       19          4004
5         false       19          4005
6         false       19          4006
7         false       2409        3301
8         true        2409        3302
9         false       2409        3303
... etc

我的分析团队将执行的最常见的搜索是按用户(示例用户 19(

SELECT * FROM rel_user_attempts WHERE userid=19 AND archived=false;

在具有非唯一列(userid(存储各种值的postgres中,是否可以对其进行索引并提高性能?

使用任何索引的好处,或者Postgres是否甚至可能选择使用特定索引,取决于几个因素,其中包括基础数据的基数。 索引在往往具有唯一或相对唯一值的列上使用时最有帮助。 您可能会发现以下索引在这里很有帮助:

CREATE INDEX idx ON rel_user_attempts (userid, archived);

至少从示例数据来看,userid列上的基数似乎不高,但至少有些高。 假设archived是布尔列,假设真/假值以相等的概率出现,则此列的基数将很低。 但是,我们仍然可以将其包含在上面的索引中,以完全涵盖查询的WHERE子句。 考虑添加上述索引,然后检查执行计划。

最新更新