postgreOptimize SQL查询:如何检查一个Id是否被分配给了其他Id(不应该)



我有一个类似的简单表格

client_id , company_id
100         1  
101         1  
102         1  
200         2  
200         2  
201         2  

对于每个client_id,我应该只有一个company_id。我需要做一个查询来检查这个。

我所做的是:

SELECT
client_id,
count(DISTINCT company_id) as count
FROM table GROUP BY
client_id
HAVING count > 1;

如果它不是空的,它应该会触发警报。

然而,我想知道我是否可以对它进行一点优化,因为我真的不需要获取每一行,我只需要知道这个查询是否至少会导致一行。

有可能吗?

EXISTS可能更快:

select distinct client_id
from t
where exists (select 1
from t t2
where t2.client_id = t.client_id and t2.company_id <> t.company_id
);

我预计在两种情况下性能会有所改善:

  • (client_id, company_id)上有一个索引
  • 大多数客户只有一家公司

最新更新