sql – 可以通过在列x上创建一个索引来优化SELECT DISTINCT x FROM giantTable查询吗?

前端之家收集整理的这篇文章主要介绍了sql – 可以通过在列x上创建一个索引来优化SELECT DISTINCT x FROM giantTable查询吗?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一张巨大的桌子,在一些列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);

猜你在找的MsSQL相关文章