查找重复记录计数的有效方法

Efficient way to find count of duplicate records

我只有 SQL 的基础知识,这是我对标签 SQL 的第一次了解,所以如果我一开始遗漏了什么,请原谅我。有一个大型数据库,其中一个 table 特别令人感兴趣,它包含超过 1 亿行。客户端正在使用 PostgreSQL 作为数据库。

这个table的结构是这样的(示例数据)table name say table

  biometric_token ID status State_code
1            ABCD  1      A          1
2            ABCD  2      R          2
3            ABCD  3      A          2
4            BCDE  4      A          1
5            DEFG  5      A          2
6            DEFG  6      A          2
7            DEFG  7      A          3
8            FGHI  8      A          4

我需要的是找出有多少(仅计数)个人(即具有相同 biometric_token)被注册了不止一次。所以输出格式类似于

  count_of_individuals number_of_times
1                    1               3
2                    1               2

说明


下面给出了我尝试过的代码(嵌套查询),它工作正常但速度很慢。我需要找到是否有任何更快的替代方法可以从这个庞大的数据库中成功检索此摘要

SELECT COUNT( DISTINCT biometric_token) AS count_of_individuals, cnt AS number_of_times
FROM

(SELECT biometric_token, count (ID) AS cnt
FROM table
WHERE status IN ('A')
GROUP BY biometric_token
HAVING cnt > 1)

GROUP BY number_of_times

我可能还会建议您当前的查询。但是,我们可以尝试将以下索引添加到您的 table:

CREATE INDEX idx ON yourTable (status, biometric_token);

这个索引应该覆盖整个查询,并且至少允许 Postgres 只需要聚合 table 的一个子集,其中包含已批准的注册记录。