我有一个巨大的表格,在某些列 x
上有更少数量的不同值(按数量级) .
我需要做一个类似 SELECT DISTINCT x FROM hugeTable
的查询,而且我想相对较快地执行此操作。
我做了类似 CREATE INDEX hugeTable_by_x ON hugeTable(x)
的事情,但由于某种原因,即使输出很小,查询执行也没有那么快。查询计划显示97%的时间都花在了hugeTable_by_x
的Index Scan上。 ,估计的行数等于整个表的大小。紧随其后的是哈希匹配操作等。
因为我在列 x
上创建了一个索引,我不能指望这个查询运行得非常快吗?
请注意,我使用的是 Microsoft SQL Server 2005。
最佳答案
这很可能不是索引的问题,而是数据设计的问题。规范化,准确地说。您需要查询字段的不同值,甚至愿意添加索引,这一事实强烈表明该字段应该被规范化为具有(小)连接键的单独表。然后通过扫描小得多的查找外部表,不同的值将立即可用。
更新
作为解决方法,您可以创建一个 indexed view在“不同”字段的聚合上。 COUNT_BIG
是索引 View 中允许的聚合:
create view vwDistinct
with schemabinding
as select x, count_big(*)
from schema.hugetable
group by x;
create clustered index cdxDistinct on vwDistinct(x);
select x from vwDistinct with (noexpand);
关于sql - 我可以通过在列 x 上创建索引来优化 SELECT DISTINCT x FROM hugeTable 查询吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5973850/