COUNT(DISTINCT column_name)的替代方案,用于检索数百万个数据



我有一个存储超过 1000 万数据的表,当我使用简单的查询时,例如

SELECT TOP 10 COALESCE(a.Name, 'NA') AS Name, 
              COUNT(DISTINCT a.Id) AS Result1, 
              COUNT(b.Id) AS Result2 
FROM Table1 a INNER JOIN Table2 b ON a.Id = b.Id 
GROUP BY a.Name

返回结果大约需要 20 分钟。

有没有办法比使用COUNT(DISTINCT)更快地计算非重复列?

*我也尝试使用GROUP BY但它是一样的。

如果列是外键列,则可以尝试从较大表中存在 ID 的外键表中选择计数。

SELECT COUNT(Id) 
FROM   SmallTable
WHERE  Id IN (Select foreignKeyID from LargeTable)

你可以尝试这样的事情:

select count(column_name) as n
from (select distinct column_name from yourTable) as a

这样,重复数据删除的重量级任务就可以通过一个简单的SELECT完成。

我当然假设您的列已编入索引。如果不是,我强烈建议您为其添加索引。

一个合理的数据库应该利用table(column_name)上的索引进行查询。

不知道你的RDBMS就不可能肯定地说,但很可能没有,没有更好的方法。 我猜你需要在该列上有一个索引,添加一个索引会将查询时间减少到几秒钟。

相关内容

  • 没有找到相关文章

最新更新