我收到了大量关于越来越多的用户的数据,这些用户试图进行物理壮举,但随后失去兴趣并离开。每个用户都有一个唯一的 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
子句。 考虑添加上述索引,然后检查执行计划。