COUNT DISTINCT的问题

urdoom 2010-09-30 03:51:35
有一个SQL语句

SELECT SLS_YM
, STR_IDX7
, COUNT(DISTINCT STR_CD + '')
FROM DWH_MLY_IDX
GROUP BY SLS_YM
, STR_IDX7


很简单的,但是源表DWH_MLY_IDX数据量很大,大概2千万左右,以后还会增加几倍。。。

SLS_YM, STR_IDX7这两个项目不是固定的,根据聚合要求的不同,会更换,比如变成
SELECT SLS_YM
, STR_IDX7
, STR_IDX8
, COUNT(DISTINCT STR_CD + '')
FROM DWH_MLY_IDX
GROUP BY SLS_YM
, STR_IDX7
, STR_IDX8


耗时从30秒到1分半左右不等

现在我想问下COUNT(distinct 某项目名)在用到其他项目来GROUP BY的时候
效率最高的做法是什么?
期待高手相助!
在线等
...全文
202 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
「已注销」 2010-10-01
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 urdoom 的回复:]

可怜我等了一晚呀
[/Quote]
对这样比较精炼的sql语句,已经不能从语句本身进行优化,所以也没办法
  • 打赏
  • 举报
回复
表分区~~
zcfzcf001 2010-10-01
  • 打赏
  • 举报
回复
只有加索引,将能涉及到的都加上索引,这就是牺牲空间换取时间没有办法的。
claro 2010-10-01
  • 打赏
  • 举报
回复
路过。

有distinct 帮不了你。
天下如山 2010-09-30
  • 打赏
  • 举报
回复
呵呵 !
urdoom 2010-09-30
  • 打赏
  • 举报
回复
可怜我等了一晚呀
urdoom 2010-09-30
  • 打赏
  • 举报
回复
数据太多,从一个实表中动态取得的,索引又不固定
三个项目只是一个例子而已
实际有180种组合方式。。。。
测试过,光加索引就要用不少时间了
billpu 2010-09-30
  • 打赏
  • 举报
回复
加点索引优化一下看看 看看执行计划有没有表扫描之类的,多试试,实践出真知
黄_瓜 2010-09-30
  • 打赏
  • 举报
回复
SLS_YM
, STR_IDX7
, STR_IDX8
这三列上加上覆盖索引
幸运的意外 2010-09-30
  • 打赏
  • 举报
回复
关注别人的方法。
「已注销」 2010-09-30
  • 打赏
  • 举报
回复
检查下看看是否需要加上index
ws_hgo 2010-09-30
  • 打赏
  • 举报
回复
你的这个sql已经相当精简啦

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧