postgresql - SQL 计数不同 ID 太慢(~7 秒)

标签 postgresql

我有这样的查询:

SELECT disease_name, COUNT(DISTINCT id)
FROM disease_table
GROUP BY disease_name

其中每个 disease_name 都有一个关联的标识符,并且同一标识符可能会多次出现疾病。

这行得通,但大约需要 7 秒才能运行

如果我运行这个查询:

SELECT disease_name, COUNT(disease_name)
FROM disease_table
GROUP BY disease_name

需要 321 毫秒,但重复的行(具有相同 ID 的相同疾病)被计算多次。

是否有更有效的方法来仅使用 SQL 在与第二个查询大致相同的时间内获得第一个查询的结果?

表格:

disease_name     |         id
------------     |    -------------  
dis_1                      123
dis_1                      104
dis_1                      104
dis_32                     123
dis_12                     123
dis_12                     115

预期:

disease_name     |        count
------------     |    -------------  
dis_1                      2
dis_32                     1
dis_12                     2

其中 dis_1 有 3 个条目,但只被计算两次,因为这 3 个条目中有两个具有相同的 id

最佳答案

尝试在 disease_table 上添加一个合适的索引,如下所示:

CREATE INDEX ON disease_table(disease_name, id);

看看这是否解决了您的问题。

关于postgresql - SQL 计数不同 ID 太慢(~7 秒),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45594455/

相关文章:

c++ - 在 PostgreSQL C 扩展中包含头文件

c++ - 使用 PostgreSQL 编译静态 Qt 5.10.0 时出错

ruby-on-rails - Ruby on Rails - 通过连接在 has_many 中使用了错误的外键

sql - 搜索具体化路径树的最右侧节点

sql - 可靠 SELECT + UPDATE 的事务与行标记

java - 如何在 JPA 中使用 Postgres JSONB 数据类型?

django.db.utils.DatabaseError : out of shared memory 错误

sql - 如何从 1 个表中选择多行并插入到另一个表中特定行的特定 JSONB 字段中?但在单个原始 SQL 查询中

postgresql - 删除后如何恢复或重新创建原始 Postgres 数据库?

postgresql - PostgresQL 安装失败 : "database cluster initialisation failed" MAC os