블로그 이미지
010-9967-0955 보미아빠

카테고리

보미아빠, 석이 (500)
밥벌이 (16)
싸이클 (1)
일상 (1)
Total
Today
Yesterday

달력

« » 2024.3
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31

공지사항

최근에 올라온 글


IF OBJECT_ID ('TBLA') IS NOT NULL
DROP TABLE DBO.TBLA;
GO

CREATE TABLE DBO.TBLA (COL1 INT, COL2 INT, COL3 INT);
GO

INSERT DBO.TBLA
SELECT TOP 100000 A.ID, B.ID, C.ID
  FROM SYS.SYSOBJECTS A, SYS.SYSOBJECTS B , SYS.SYSOBJECTS C
GO


SELECT COUNT(DISTINCT COL1), COUNT(DISTINCT COL2)
  FROM DBO.TBLA
GO

 

 

SELECT COUNT(C1), COUNT(C2)
FROM (
       SELECT DISTINCT
              CASE WHEN CP=1 THEN COL1 ELSE NULL END C1
      , CASE WHEN CP=2 THEN COL2 ELSE NULL END C2
      FROM DBO.TBLA
   INNER LOOP JOIN (SELECT 1 'CP' UNION ALL SELECT 2) B
        ON 1=1
   ) A    
OPTION (QUERYTRACEON 8649)

 

 

우린 cpu 가 남아 돌구요 i/o 는 영 비리 비리 해서........꼭 한번만 읽어서 처리하고 싶어요...

그러나 sql server 는 멀티컬럼 count(distinct) 는 spool 없이 처리하지 못합니다. spool 이 생기면 serial 처리가 되고....

 

이런게 가능은 하지만 worktable 을 만들어 씀 (ssd 에 있다고 하고,,,, ㅋㅋㅋ) 혹은 ram disk?

실제 데이터가 엄청 크고, count(distinct a), count(distinct a) 의 종류가 많지 않을때는 아래 쿼리가 훨씬 유리해 보인다.

 

select COUNT(col1), COUNT(col2)
from (
select col1, col2
  from dbo.tbla
 group by grouping sets ((col1), (col2))
 ) a
go

 

 

 

그러나, 각각의 컬럼에 인덱스가 있다면, 쌈빡하게 품.....그건

SELECT COUNT(DISTINCT COL1), COUNT(DISTINCT COL2)
FROM DBO.TBLA

 

이거나 마찬가지

Posted by 보미아빠
, |

ram disk

카테고리 없음 / 2013. 2. 11. 01:31

http://cdmanii.com/3241

Posted by 보미아빠
, |

http://msdn.microsoft.com/ko-kr/library/ms191183.aspx

Posted by 보미아빠
, |

최근에 달린 댓글

최근에 받은 트랙백

글 보관함