我有一张巨大的桌子,在一些列x上有一个小得多(数量级)不同值的数字.
我需要像SELECT DISTINCT x FROM hugeTable这样的查询,我想做的比较快.
我做了像CREATE INDEX giantTable_by_x ON hugeTable(x)这样的东西,但由于某种原因,即使输出较小,查询执行也不是很快.查询计划显示,97%的时间花在了bigTable_by_x的索引扫描上,其估计的行数等于整个表的大小.其次是哈希匹配操作.
由于我在列x上创建了一个索引,我不能指望这个查询运行得很快?
请注意,我使用的是Microsoft sql Server 2005.
解决方法
这可能不是索引的问题,而是数据设计之一.规范化,准确.事实上,您需要查询字段的不同值,甚至愿意添加索引,这是一个很强的指示器,该字段应该被标准化为具有(小)连接键的单独表格.然后,通过扫描更小的查找外部表,可以立即获得不同的值.
更新
作为解决方法,您可以通过“distinct”字段在聚合上创建一个indexed view. COUNT_BIG
是在索引视图中允许的聚合:
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);