加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

sql – 可以通过在列x上创建一个索引来优化SELECT DISTINCT x FR

发布时间:2020-12-12 16:29:39 所属栏目:MsSql教程 来源:网络整理
导读:我有一张巨大的桌子,在一些列x上有一个小得多(数量级)不同值的数字. 我需要像SELECT DISTINCT x FROM hugeTable这样的查询,我想做的比较快. 我做了像CREATE INDEX giantTable_by_x ON hugeTable(x)这样的东西,但由于某种原因,即使输出较小,查询执行也不是很快
我有一张巨大的桌子,在一些列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);

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读