我有一个存储超过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
,但它也一样。
答案 0 :(得分:2)
如果列是外键列,您可以尝试从较大表中存在ID的外键表中选择计数。
SELECT COUNT(Id)
FROM SmallTable
WHERE Id IN (Select foreignKeyID from LargeTable)
答案 1 :(得分:0)
您可以尝试这样的事情:
select count(column_name) as n
from (select distinct column_name from yourTable) as a
这样,重复数据删除的繁重任务是通过简单的SELECT
完成的。
我当然假设您的列已编入索引。如果不是,我强烈建议你添加一个索引。
答案 2 :(得分:0)
合理的数据库应该利用{{1}}上的索引来查询。
答案 3 :(得分:0)
在不知道你的RDBMS的情况下,不可能肯定地说,但很可能不是,没有更好的方法。我猜你需要在该列上有一个索引,而添加一个索引会将查询时间减少到几秒钟。