我有一个非常大的表,有10亿行和12列,分别是int
,double
,varchar
。我需要知道每个卷的不同值。
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
可以加快查询速度吗?
谢谢!
答案 0 :(得分:3)
为要以此方式查询的每列创建索引视图。意识到,DISTINCT
相当于所有列上的GROUP BY
。视图看起来像这样:
SELECT MyCol, COUNT_BIG(*) Count FROM T GROUP BY MyCol
现在在其上创建一个索引。在企业版中,此索引将自动加速您的原始查询。在标准版中,您需要使用NOEXPAND
直接查询此视图。
然后,查询将作为普通索引扫描执行。它可以从索引中读取您想要的确切结果。没有更快的速度。