我有一个存储超过 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就不可能肯定地说,但很可能没有,没有更好的方法。 我猜你需要在该列上有一个索引,添加一个索引会将查询时间减少到几秒钟。