来自非常大的表的列的不同值

时间:2014-05-21 16:18:39

标签: sql sql-server sql-server-2008

我有一个非常大的表,有10亿行和12列,分别是intdoublevarchar。我需要知道每个卷的不同值。

SELECT COUNT(distinct a.id) as num_dist_id
 FROM my_large_table as a

SELECT distinct a.id
 FROM my_large_table as a

这很慢。

有更好的方法吗?

---------------- update --------------------

该表有列:

 id   id_1   id_2  id_3  id_4  id_5  id_6  id_7  id_8  id_9  id_10  id_11 

SELECT distinct a.id , a.id_1 , a.id_2, a.id_3, a.id_4, a.id_5, a.id_6 ... 
 FROM my_large_table as a
 ORDER BY a.id, a.id_1, a.id_2 

可以加快查询速度吗?

谢谢!

1 个答案:

答案 0 :(得分:3)

为要以此方式查询的每列创建索引视图。意识到,DISTINCT相当于所有列上的GROUP BY。视图看起来像这样:

SELECT MyCol, COUNT_BIG(*) Count FROM T GROUP BY MyCol

现在在其上创建一个索引。在企业版中,此索引将自动加速您的原始查询。在标准版中,您需要使用NOEXPAND直接查询此视图。

然后,查询将作为普通索引扫描执行。它可以从索引中读取您想要的确切结果。没有更快的速度。