count(distinct ) 襴郁化郁 襷. 企 蟆曙一 襴螻, SQL Server 覯 磯ジ 谿企 企れ 危エ覲伎. 朱 ろ 一危磯ゼ 襷れ.
if object_id('tempdb.dbo.#temp') is not null
drop table #temp
;with temp
as
(
select *
from (values (1),(2),(3),(4),(5),(6),(7)) t(seq)
)
select
a.seq id
, (b.seq + c.seq + d.seq + f.seq) % 3 grp
, b.seq + c.seq + d.seq + f.seq val
into #temp
from temp a
cross join temp b
cross join temp c
cross join temp d
cross join temp f
谿瑚襦 set statistics io on 覃 企 '#temp_______________________________________________________________________________________________________________000000015577' 螳 朱 る '#temp'襦 り 襦 讌.
3 觜蟲2 #
select
sum(val) amt
, count(distinct id) distinct_count
from #temp
2008
企 'Worktable'. 蟆 0, 朱Μ 所鍵 0, 覓朱Μ 所鍵 0, 覩碁Μ 所鍵 0, LOB 朱Μ 所鍵 0, LOB 覓朱Μ 所鍵 0, LOB 覩碁Μ 所鍵 0.
企 '#temp'. 蟆 2, 朱Μ 所鍵 90, 覓朱Μ 所鍵 0, 覩碁Μ 所鍵 0, LOB 朱Μ 所鍵 0, LOB 覓朱Μ 所鍵 0, LOB 覩碁Μ 所鍵 0.
2012
企 'Worktable'. 蟆 0, 朱Μ 所鍵 0, 覓朱Μ 所鍵 0, 覩碁Μ 所鍵 0, LOB 朱Μ 所鍵 0, LOB 覓朱Μ 所鍵 0, LOB 覩碁Μ 所鍵 0.
企 '#temp'. 蟆 1, 朱Μ 所鍵 44, 覓朱Μ 所鍵 0, 覩碁Μ 所鍵 0, LOB 朱Μ 所鍵 0, LOB 覓朱Μ 所鍵 0, LOB 覩碁Μ 所鍵 0.
4 觜蟲3 #
select
grp
, sum(val) amt
, count(distinct id) distinct_count
from #temp
group by
grp
2008
企 'Worktable'. 蟆 0, 朱Μ 所鍵 0, 覓朱Μ 所鍵 0, 覩碁Μ 所鍵 0, LOB 朱Μ 所鍵 0, LOB 覓朱Μ 所鍵 0, LOB 覩碁Μ 所鍵 0.
企 '#temp'. 蟆 2, 朱Μ 所鍵 90, 覓朱Μ 所鍵 0, 覩碁Μ 所鍵 0, LOB 朱Μ 所鍵 0, LOB 覓朱Μ 所鍵 0, LOB 覩碁Μ 所鍵 0.
2012
企 'Worktable'. 蟆 0, 朱Μ 所鍵 0, 覓朱Μ 所鍵 0, 覩碁Μ 所鍵 0, LOB 朱Μ 所鍵 0, LOB 覓朱Μ 所鍵 0, LOB 覩碁Μ 所鍵 0.
企 '#temp'. 蟆 1, 朱Μ 所鍵 44, 覓朱Μ 所鍵 0, 覩碁Μ 所鍵 0, LOB 朱Μ 所鍵 0, LOB 覓朱Μ 所鍵 0, LOB 覩碁Μ 所鍵 0.
5 觜蟲4 #
select
grp
, sum(val) amt
, count(distinct id) distinct_count
from #temp
where id <= 10
group by
grp
2008
企 'Worktable'. 蟆 2, 朱Μ 所鍵 34038, 覓朱Μ 所鍵 0, 覩碁Μ 所鍵 0, LOB 朱Μ 所鍵 0, LOB 覓朱Μ 所鍵 0, LOB 覩碁Μ 所鍵 0.
企 '#temp'. 蟆 1, 朱Μ 所鍵 45, 覓朱Μ 所鍵 0, 覩碁Μ 所鍵 0, LOB 朱Μ 所鍵 0, LOB 覓朱Μ 所鍵 0, LOB 覩碁Μ 所鍵 0.
.. 2008覯 覲螳.
2012
企 'Worktable'. 蟆 0, 朱Μ 所鍵 0, 覓朱Μ 所鍵 0, 覩碁Μ 所鍵 0, LOB 朱Μ 所鍵 0, LOB 覓朱Μ 所鍵 0, LOB 覩碁Μ 所鍵 0.
企 '#temp'. 蟆 1, 朱Μ 所鍵 44, 覓朱Μ 所鍵 0, 覩碁Μ 所鍵 0, LOB 朱Μ 所鍵 0, LOB 覓朱Μ 所鍵 0, LOB 覩碁Μ 所鍵 0.
讌螻 COUNT(DISTINCT)螳 朱 一伎 螻 るジ 讌螻(COUNT(DISTINCT)襯 2 伎 ) 螳 一企 磯 るゴ讌襷 企 2覦 伎 i/o螳 覦. 螳 豕 COUNT(DISTINCT)螳 るジ 讌螻 螳 一願, where 譟郁唄 覈 SQL ろ 企. 蟆曙 COUNT(DISTINCT)螳 覈 襷
Spool企.
Spool 一一 伎 tempdb 郁, 暑 一一企. 蠏碁覩襦 襷 IO螳 覦蟆 . 蠍郁讌螳 2008 伎手鍵. 2012 COUNT(DISTINCT) 覦覲給 一一 譯殊讌襷, 願 COUNT(DISTINCT)螳 1襷 螳 襷 願屋. れ SQL 覲伎.
select
sum(val) amt
, count(distinct id) distinct_count
, count(distinct grp) distinct_count
from #temp
where id <= 10 -- 譟郁唄 觜朱 spool table scan 3 殊企.
企 'Worktable'. 蟆 3, 朱Μ 所鍵 34100, 覓朱Μ 所鍵 0, 覩碁Μ 所鍵 0, LOB 朱Μ 所鍵 0, LOB 覓朱Μ 所鍵 0, LOB 覩碁Μ 所鍵 0.
企 '#temp'. 蟆 1, 朱Μ 所鍵 44, 覓朱Μ 所鍵 0, 覩碁Μ 所鍵 0, LOB 朱Μ 所鍵 0, LOB 覓朱Μ 所鍵 0, LOB 覩碁Μ 所鍵 0.
譟郁 るジ 覦覯 危エ覲伎. 2012覯 columnstore index襯 燕 . columnstore index 螻 SQL ろ企慨.
create nonclustered columnstore index ncix_01
on #temp
(
id
, grp
, val
)
select
sum(val) amt
, count(distinct id) distinct_count
, count(distinct grp) distinct_count
from #temp
企 'Worktable'. 蟆 0, 朱Μ 所鍵 0, 覓朱Μ 所鍵 0, 覩碁Μ 所鍵 0, LOB 朱Μ 所鍵 0, LOB 覓朱Μ 所鍵 0, LOB 覩碁Μ 所鍵 0.
企 '#temp'. 蟆 3, 朱Μ 所鍵 26, 覓朱Μ 所鍵 0, 覩碁Μ 所鍵 0, LOB 朱Μ 所鍵 0, LOB 覓朱Μ 所鍵 0, LOB 覩碁Μ 所鍵 0.
i/o螳 襷 譴. 蠏碁る where 譟郁唄 譴る 企至 蟾?
select
sum(val) amt
, count(distinct id) distinct_count
, count(distinct grp) distinct_count
from #temp
where id <= 10
企 'Worktable'. 蟆 3, 朱Μ 所鍵 34100, 覓朱Μ 所鍵 0, 覩碁Μ 所鍵 0, LOB 朱Μ 所鍵 0, LOB 覓朱Μ 所鍵 0, LOB 覩碁Μ 所鍵 0.
企 '#temp'. 蟆 1, 朱Μ 所鍵 26, 覓朱Μ 所鍵 0, 覩碁Μ 所鍵 0, LOB 朱Μ 所鍵 0, LOB 覓朱Μ 所鍵 0, LOB 覩碁Μ 所鍵 0.
..
2012 覲螳. count(distinct)讌螻 ssis襯 伎 蟆 螻るゼ 企 襭 蟆. CLR 伎 覦覯 .
蠍(http://databaser.net/moniwiki/wiki.php/DistinctCount)襯 覲企 CLR 讌螻襯 伎 覦覯 , 覃覈襴螳 豢覿伎 螻, 企 int襷 襷り覲襦 覦 曙 .