'SQL Server 2008'에 해당되는 글 25건

  1. SQL2008의 새로운 기능 - TF-610 (최소 로그)
  2. SQL2008의 새로운 기능 - 필터링된 인덱스
  3. How to Read the Results of SELECT @@VERSION in SQL Server
  4. SQL2008의 새로운 기능 - 압축편 1
  5. DB Logical Rename (2005, 2008...)
  6. 트랜잭션 로그 파일 없이 복구하기
  7. DATABASE 생선 옵션
  8. AWE 설정
  9. Analyze and Fix Index Fragmentation in SQL Server 2008
  10. GROUPING SETS
http://www.sqler.com/137190#0


INSERT SELECT :

non-FULL recovery model
AND not replicated
AND (
  (Heap AND TABLOCK)
  OR (B-tree AND empty AND TABLOCK)
  OR (B-tree AND empty AND TF-610)
  OR (B-tree AND nonempty AND TF-610 AND new key-range)
)

With this trace flag on, insertions into a B-tree
don’t have to use the TABLOCK hint to benefit from
minimal logging. Also, insertions into nonempty
B-trees can be done in minimally logged mode—at
least partially.

1) TF-610 옵션 설정 방법
DBCC TRACEON(610, -1);

2) non-FULL recovery Model
SIMPLE recovery model, Bulk_LOGGED

3) B-tree 의미
clustered or nonclustered index



참고 링크
Filtered Index Design Guidelines
http://msdn.microsoft.com/en-us/library/cc280372.aspx
SQL Server Filtered Indexes - What They Are, How to Use and Performance Advantages 
인덱스에 포함할 행을 지정하여 필터링된 인덱스를 만듭니다. 필터링된 인덱스는 테이블의 비클러스터형 인덱스여야 합니다. 필터링된 인덱스의 데이터 행에 대한 필터링된 통계를 만듭니다.

 


참고링크
Filtered Index Design Guidelines : http://msdn.microsoft.com/en-us/library/cc280372.aspx
추후 재 정리하도록 하겠습니다^^

USE tableDB

go;

 

CREATE TABLE DBO.T_FILTER_INDEX

(

             a INT

             , b INT

)

GO

 

DROP INDEX T_FILTER_INDEX.CL_T_FILTER_INDEX_a

GO

 

-- 클러스터드인덱스에는생성이안된다.

--CREATE CLUSTERED INDEX CL_T_FILTER_INDEX_a

--ON dbo.T_FILTER_INDEX( a )

--WHERE a IS NOT NULL;

--GO

 

-- NC만생성이가능하구낭??

CREATE INDEX NC_T_FILTER_INDEX_a

ON dbo.T_FILTER_INDEX( a )

WHERE a IS NOT NULL;

GO

 

 

SET NOCOUNT ON

GO

 

-- 10000 번반복하다.

INSERT INTO dbo.T_FILTER_INDEX(a, b) VALUES(NULL, NULL)

GO 10000

 

DECLARE @i INT = 0;

WHILE @i < 40000

BEGIN

             INSERT INTO dbo.T_FILTER_INDEX(a, b) VALUES(@i, @i)     

 

             SET @i+=1;

END

 

 

EXEC sp_spaceused 'T_FILTER_INDEX'

GO

 

--name rows      reserved             data       index_size          unused

--T_FILTER_INDEX           50706               2504 KB 1656 KB 744 KB   104 KB

 

DBCC SHOW_STATISTICS('T_FILTER_INDEX', 'NC_T_FILTER_INDEX_a')

GO

 

SELECT COUNT(*)

FROM T_FILTER_INDEX

WHERE a IS NOT NULL

 

--Name                                                                                                                             Updated              Rows                 Rows Sampled         Steps  Density       Average key length String Index Filter Expression                                                                                                                                                                                                                                                Unfiltered Rows

---------------------------------------------------------------------------------------------------------------------------------- -------------------- -------------------- -------------------- ------ ------------- ------------------ ------------ ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- --------------------

--NC_T_FILTER_INDEX_a                                                                                                              01 13 2010  3:55PM   40000                40000                3      1             4                  NO           ([a] IS NOT NULL)                                                                                                                                                                                                                                                50706

 

--All density   Average Length Columns

--------------- -------------- ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

--2.5E-05       4              a

 

--RANGE_HI_KEY RANGE_ROWS    EQ_ROWS       DISTINCT_RANGE_ROWS  AVG_RANGE_ROWS

-------------- ------------- ------------- -------------------- --------------

--0            0             1             0                    1      

--39998        39997         1             39997                1

--39999        0             1             0                    1

 

 

 

 


필터 조건자는 간단한 비교 논리를 사용하며 계산 열, UDT 열, 공간 데이터 형식 열 또는 HierarchyID 데이터 형식 열을 참조할 수 없습니다. 비교 연산자에는 NULL 리터럴을 사용한 비교를 사용할 수 없습니다. 대신 IS NULL 및 IS NOT NULL 연산자를 사용합니다.

사용예,,>>

WHERE StartDate > '20000101' AND EndDate <= '20000630'

WHERE ComponentID IN (533, 324, 753)

WHERE StartDate IN ('20000404', '20000905') AND EndDate IS NOT NULL

필터링된 인덱스는 XML 인덱스 및 전체 텍스트 인덱스에는 적용되지 않습니다. UNIQUE 인덱스의 경우에는 선택한 행만 고유 인덱스 값을 가져야 합니다. 필터링된 인덱스에서는 IGNORE_DUP_KEY 옵션이 허용되지 않습니다.



필터링 인덱스 >>

>> 장점 
인덱스 사이즈가 줄겠죠??  NULL Value 또는 특정 Value로 되어 있는 부분에 대한 인덱스 생성 하기 두려웠는데~ 인덱스 필터링으로 가능해짐..


   



원본 : http://glennberrysqlperformance.spaces.live.com/blog/cns!45041418ECCAA960!3075.entry



Microsoft SQL Server 2008 (SP1) - 10.0.2746.0 (X64)   Nov  9 2009 16:37:47   
Copyright (c) 1988-2008 Microsoft Corporation  Enterprise Edition (64-bit) on Windows NT 6.1 <X64> (Build 7600: )  
-- SQL Server Major Versions
9.00 - SQL Server 2005
10.0 - SQL Server 2008
10.25 - SQL Server Azure
10.50 - SQL Server 2008 R2

-- SQL Server 2005/2008 Build lists

--   2005 SP2 Builds                  2005 SP3 Builds
-- Build       Description        Build       Description
-- 3042        SP2 RTM              4035        SP3 RTM
-- 3161        SP2 CU1              4207        SP3 CU1
-- 3175        SP2 CU2              4211        SP3 CU2 
-- 3186        SP2 CU3              4220        SP3 CU3         
-- 3200        SP2 CU4              4226        SP3 CU4         
-- 3215        SP2 CU5              4230        SP3 CU5          
-- 3228        SP2 CU6              4266        SP3 CU6        
-- 3239        SP2 CU7              4273        SP3 CU7        
-- 3257        SP2 CU8
-- 3282        SP2 CU9
-- 3294        SP2 CU10
-- 3301        SP2 CU11
-- 3315        SP2 CU12
-- 3325        SP2 CU13
-- 3328        SP2 CU14
-- 3330        SP2 CU15
-- 3355        SP2 CU16
-- 3356        SP2 CU17


--   2008 RTM Builds                    2008 SP1 Builds
-- Build       Description        Build        Description
-- 1600        Gold RTM
-- 1763        RTM CU1
-- 1779        RTM CU2
-- 1787        RTM CU3    -->      2531        SP1 RTM
-- 1798        RTM CU4    -->      2710        SP1 CU1
-- 1806        RTM CU5    -->      2714        SP1 CU2 
-- 1812        RTM CU6    -->      2723        SP1 CU3
-- 1818        RTM CU7    -->      2734        SP1 CU4
-- 1823        RTM CU8    -->      2746        SP1 CU5


-- Windows Major Versions
Windows NT 5.1    - Windows XP
Windows NT 5.2    - Windows Server 2003
Windows NT 6.0, Build 6001 - Vista 
Windows NT 6.0, Build 6002 - Windows Server 2008
Windows NT 6.1  - Windows Server 2008 R2 or Windows 7
-- Some more example outputs from SELECT @@VERSION

-- 32-bit SQL Server 2005 Developer Edition Build 4262, running on 32-bit Windows Server 2003 SP2
Microsoft SQL Server 2005 - 9.00.4262.00 (Intel X86)   Aug 13 2009 17:08:37   
Copyright (c) 1988-2005 Microsoft Corporation  Developer Edition on Windows NT 5.2 (Build 3790: Service Pack 2)

-- 32-bit SQL Server 2005 Standard Edition Build 4262, running on 32-bit Windows Server 2003 SP2
Microsoft SQL Server 2005 - 9.00.4262.00 (Intel X86)   Aug 13 2009 17:08:37   
Copyright (c) 1988-2005 Microsoft Corporation  Standard Edition on Windows NT 5.2 (Build 3790: Service Pack 2)

-- 64-bit SQL Server 2008 Enterprise Edition Build 2746, running on 64-bit Windows Server 2003 SP2
Microsoft SQL Server 2008 (SP1) - 10.0.2746.0 (X64)   Nov  9 2009 16:37:47   
Copyright (c) 1988-2008 Microsoft Corporation  Enterprise Edition (64-bit) on Windows NT 5.2 <X64> (Build 3790: Service Pack 2)  

-- 64-bit SQL Server 2008 Enterprise Edition Build 2746, running on 64-bit Windows Server 2008 SP2
Microsoft SQL Server 2008 (SP1) - 10.0.2746.0 (X64)   Nov  9 2009 16:37:47   
Copyright (c) 1988-2008 Microsoft Corporation  Enterprise Edition (64-bit) on Windows NT 6.0 <X64> (Build 6002: Service Pack 2) 

-- 64-bit SQL Server 2008 Enterprise Edition Build 2746, running on 64-bit Windows Server 2008 R2 (or Windows 7)
Microsoft SQL Server 2008 (SP1) - 10.0.2746.0 (X64)   Nov  9 2009 16:37:47   
Copyright (c) 1988-2008 Microsoft Corporation  Enterprise Edition (64-bit) on Windows NT 6.1 <X64> (Build 7600: )  


뇌를 자극하는 SQL Server 2008





SQL2008 관련하여 압축 기능을 강화하였다...

장점>>
디스크 공간이 절약된다. 
백업,복구, 인덱스 재구성등의 시간과 비용이 절감된다.
작아진 데이터를 메모리에 올림으로써 메모리의 공간이 절약되어, 다른 프로세스가 사용할 수 있는 메모리 공간이 확보

압축기능
1) 로우 압축
2) 페이지 압축
3) 백업 압축

가능 버젼
SQL2008 Ent, Dev

압축이 효과가 없는 형식
tinyint, smalldatetime, date, time, varchar, nvarchar, text, varbinary, image, cursor, sql_vairnat, uniqueidentifier, table, xmal, 사용자 정의 형식, FILESTREAM

머,, 대략,, nchar, char  고정으로 되어 있는 부분 압축하겠다는 것인데....

테스트 해보자!!!


use tableDB

go

 

------------------------

-- TABLE 생성

------------------------

create table dbo.noCompress

(

             txt char(100)

);

go

 

create table dbo.Compress

(

             txt char(100)

) with ( data_compression=row) ;

go

 

SET NOCOUNT ON;

 

------------------------

-- SampleData Insert

------------------------

DECLARE @i INT = 0;

WHILE @i < 40000

BEGIN

             INSERTINTO dbo.noCompressvalues('ABC');

             INSERTINTO dbo.Compressvalues('ABC');           

 

             SET@i+=1;

END

 

------------------------

-- 공간절약얼마나??

------------------------

exec sp_spaceused 'noCompress'

go

exec sp_spaceused 'Compress'

go

 

--name rows      reserved             data       index_size          unused

--noCompress   40000              4552 KB 4512 KB 8KB      32 KB

--Compress       40000              520 KB   464 KB   8KB      48 KB

 

 

------------------------

-- I/O를얼마나줄이느냐??

------------------------

set statistics io on

go

 

select top 100  *

from noCompress

 

 

select top 100  *

from Compress

go

 

-- 우와,, 많이절약되는구낭

--테이블'noCompress'. 검색수1, 논리적읽기수2, 물리적읽기수0,미리읽기수0, LOB 논리적읽기수0, LOB 물리적읽기수0, LOB 미리읽기수0.

--테이블'Compress'. 검색수1, 논리적읽기수1, 물리적읽기수0,미리읽기수0, LOB 논리적읽기수0, LOB 물리적읽기수0, LOB 미리읽기수0.

--go

 

------------------------

-- 압축을하였을경우얼마나절약할수있는지예측프로시져

------------------------

exec sp_estimate_data_compression_savings'dbo', 'noCompress', null, null, 'row';

go

 

--object_name   schema_name   index_id              partition_number size_with_current_compression_setting(KB)             size_with_requested_compression_setting(KB)      sample_size_with_current_compression_setting(KB)             sample_size_with_requested_compression_setting(KB)

--noCompress   dbo       0            1            4520      472        4344      456

 

--------------------------

--nocompress table 행압축시도

--------------------------

ALTER TABLE dbo.noCompress

             REBUILDWITH(DATA_COMPRESSION=ROW);

GO

 

exec sp_spaceused 'noCompress'

go

            

            

 




위의 내용을 내 프로젝트에 적용해보려고 하지만,,, 압축률이 얼마나 나올지,,궁굼하다,, 대 부분이 가변형이라,,, 허흠,,,,
압축이 된다면,, 어떤게? 단점일까?? UPDATE 비용이 커질려나??? 허흠,,


-- 2010.01.13
int형에 압축율이 얼마 되는지 확인해 보았다. 당근이^^ 고정형 문자열에 비해 높은 압축이 되지 않았지만,,, 대용량 시스템에서 가능할 법도 한???


--noCompress_int           40000               1160KB 1128 KB 8KB      24 KB

--Compress_int  40000              904 KB   880 KB   8KB      16 KB





--------------------------------------------------------

-- Steps to Rename a SQL Server Database

--------------------------------------------------------

/* Set Database as a Single User */

ALTER DATABASE CoreDB SET SINGLE_USER WITH ROLLBACK IMMEDIATE

/* Change Logical File Name */

ALTER DATABASE [CoreDB] MODIFY FILE (NAME=N'CoreDB', NEWNAME=N'ProductsDB')

GO

ALTER DATABASE [CoreDB] MODIFY FILE (NAME=N'CoreDB_log', NEWNAME=N'ProductsDB_log')

GO



'SQL Server 2008' 카테고리의 다른 글

How to Read the Results of SELECT @@VERSION in SQL Server  (0) 2010.01.13
SQL2008의 새로운 기능 - 압축편  (1) 2010.01.12
트랜잭션 로그 파일 없이 복구하기  (0) 2009.12.18
DATABASE 생선 옵션  (0) 2009.12.18
AWE 설정  (0) 2009.03.06

참고 링크 : http://www.mssqltips.com/tip.asp?tip=1894

-- Using T-SQL - Attach a SQL Server Database without a Transaction Log File

SELECT @@VERSION

GO

 

--Microsoft SQL Server 2008 (SP1) - 10.0.2531.0 (Intel X86)

--          Mar 29 2009 10:27:29

--          Copyright (c) 1988-2008 Microsoft Corporation

--          Developer Edition on Windows NT 5.1 <X86> (Build 2600: Service Pack 3)

 

execute sp_detach_db 'LOGTEST2'

go

 

CREATE DATABASE LOGTEST2

ON

(FILENAME = N'D:\logTest.mdf')

FOR ATTACH

GO

 

DBCC CHECKDB ('LOGTEST2')

GO

 

 


'SQL Server 2008' 카테고리의 다른 글

SQL2008의 새로운 기능 - 압축편  (1) 2010.01.12
DB Logical Rename (2005, 2008...)  (0) 2010.01.06
DATABASE 생선 옵션  (0) 2009.12.18
AWE 설정  (0) 2009.03.06
Analyze and Fix Index Fragmentation in SQL Server 2008  (0) 2008.12.02

DATABASE 생선 옵션

SQL2005, 2008 생성 옵션,,, model database에 설정해 놓으면 편안할 듯

 IF (1 = FULLTEXTSERVICEPROPERTY('IsFullTextInstalled'))

begin

             EXEC [JUDYDBA].[dbo].[sp_fulltext_database] @action = 'disable'

end

GO

 ALTER DATABASE [JUDYDBA] SET AUTO_CREATE_STATISTICS ON

GO

ALTER DATABASE [JUDYDBA] SET AUTO_UPDATE_STATISTICS ON

GO

ALTER DATABASE [JUDYDBA] SET AUTO_SHRINK OFF

GO

ALTER DATABASE [JUDYDBA] SET PAGE_VERIFY CHECKSUM 

GO

ALTER DATABASE [JUDYDBA] SET AUTO_UPDATE_STATISTICS_ASYNC ON

GO

 

 

 


'SQL Server 2008' 카테고리의 다른 글

DB Logical Rename (2005, 2008...)  (0) 2010.01.06
트랜잭션 로그 파일 없이 복구하기  (0) 2009.12.18
AWE 설정  (0) 2009.03.06
Analyze and Fix Index Fragmentation in SQL Server 2008  (0) 2008.12.02
GROUPING SETS  (0) 2008.11.05

AWE 설정

AWE는 액세스 가능한 프로세스 주소 공간이 4GB로 제한되는 32비트 응용 프로그램의 한계를 해결합니다. 32비트 포인터는 4GB를 초과하는 메모리 주소를 가리킬 수 없습니다.

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

Windows Server 2003에서 AWE로 매핑된 메모리 사용

SQL Server는 Windows Server 2003에서 AWE 메모리의 동적 할당을 지원합니다. SQL Server는 시작 과정에서 AWE로 매핑된 메모리의 일부만 예약합니다. AWE로 매핑된 추가 메모리가 필요한 경우 운영 체제에서 동적으로 메모리를 SQL Server에 할당합니다. 마찬가지로 적은 리소스만 필요한 경우 SQL Server에서는 다른 프로세스나 응용 프로그램에서 사용할 수 있도록 AWE 매핑된 메모리를 운영 체제로 반환합니다. awe enabled 구성 옵션에 대한 자세한 내용은 awe enabled 옵션을 참조하십시오.

Windows Server 2003 제품군부터 지원하는 실제 메모리 양이 증가했습니다. 따라서 AWE에서 액세스할 수 있는 실제 메모리 양은 사용 중인 운영 체제에 따라 달라집니다. 다음 목록에서는 작성 시점을 기준으로 각각의 Windows Server 2003 운영 체제가 액세스할 수 있는 최대 실제 메모리를 보여 줍니다.

  • Windows Server 2003 Standard Edition에서는 실제 메모리를 4GB까지 지원합니다.
  • Windows Server 2003 Enterprise Edition에서는 실제 메모리를 32GB까지 지원합니다.
  • Windows Server 2003 Datacenter Edition에서는 실제 메모리를 64GB까지 지원합니다.

메모리 옵션 구성

SQL Server는 Windows Server 2003 운영 체제의 모든 버전에서 실행할 때 AWE로 매핑된 메모리를 동적으로 할당합니다. 따라서 버퍼 풀이 AWE로 매핑된 메모리를 동적으로 관리하여(min server memorymax server memory 옵션의 제약을 받음) 전체 시스템 요구 사항에 따라 SQL Server 메모리 사용량을 조절할 수 있습니다.

AWE가 설정되면 SQL Server는 항상 AWE로 매핑된 메모리를 사용하려고 시도합니다. 이는 응용 프로그램에 3GB 미만의 사용자 모드 주소 공간을 제공하도록 구성된 컴퓨터를 포함하여 모든 메모리 구성에 적용됩니다.

  • Windows Server 2003에서 실행하는 SQL Server의 기본 메모리 모드로 AWE를 설정하는 것이 좋습니다. Hot Add 메모리 기능을 사용하려면 SQL Server 시작 과정에서 AWE를 설정해야 합니다. 자세한 내용은 Hot Add 메모리를 참조하십시오.
ms190673.note(ko-kr,SQL.100).gif참고:
AWE는 필요하지 않으며 64비트 운영 체제에서 구성할 수 없습니다.

  • AWE로 매핑된 메모리는 3GB 미만까지만 지원되므로 min server memorymax server memory 값을 실제 메모리 범위 내에서 정의하거나 두 옵션의 기본값을 사용하십시오.
  • 컴퓨터에서 실행되는 다른 응용 프로그램에 대한 추가 메모리를 보장하기 위해 SQL Server에 대한 max server memory를 설정할 수도 있습니다. SQL Server는 AWE로 매핑된 메모리를 동적으로 해제할 수 있지만 현재 할당된 AWE로 매핑된 메모리 양을 페이징 파일로 스와핑할 수는 없습니다.

SQL Server 인스턴스에서 AWE를 사용하려면 sp_configure를 사용하여 awe enabled 옵션을 1로 설정한 다음 SQL Server를 다시 시작하십시오.

min server memorymax server memory에 대한 자세한 내용은 서버 메모리 옵션을 참조하십시오.

AWE를 설정하기 전에 Lock Pages in Memory 정책을 구성해야 합니다. 자세한 내용은 방법: Lock Pages in Memory 옵션 설정(Windows)을 참조하십시오.

다음 예에서는 AWE를 활성화하고 min server memory 제한을 1GB로, max server memory 제한을 6GB로 구성하는 방법을 보여 줍니다.

먼저 AWE를 구성합니다.

sp_configure 'show advanced options', 1
RECONFIGURE
GO

sp_configure 'awe enabled', 1
RECONFIGURE
GO

SQL Server를 다시 시작한 후 SQL Server 오류 로그에 다음 메시지가 기록됩니다. "Address Windowing Extensions이 설정되어 있습니다."

다음으로 메모리를 구성합니다.

sp_configure 'min server memory', 1024
RECONFIGURE
GO

sp_configure 'max server memory', 6144
RECONFIGURE
GO

이 예에서는 버퍼 풀이 AWE로 매핑된 메모리를 1GB에서 6GB 사이에서 동적으로 할당하도록 메모리를 설정합니다. 다른 응용 프로그램에 추가 메모리가 필요한 경우 SQL Server에서 필요하지 않은 AWE로 매핑된 할당 메모리를 해제할 수 있습니다. 이 예에서는 AWE로 매핑된 메모리를 최대 1GB까지만 해제할 수 있습니다.

Hot Add 메모리를 지원하는 컴퓨터에 메모리가 추가된 경우 SQL Server에서 동적 AWE 메모리를 통해 메모리를 늘릴 수도 있습니다. Windows Server 2003 Enterprise 및 Datacenter Edition에서 사용 가능한 Hot Add 메모리를 통해 컴퓨터를 실행하는 동안 메모리를 추가할 수 있습니다. 예를 들어 Windows Server 2003 Enterprise Edition에서 실행되는 SQL Server를 실제 메모리가 16GB인 컴퓨터에서 시작한다고 가정합니다. 운영 체제는 응용 프로그램의 가상 메모리 주소 공간을 2GB로 제한하도록 구성되고 SQL Server에서 AWE가 활성화됩니다. 이후 시스템 관리자가 컴퓨터를 실행하는 동안 16GB의 메모리를 추가하면 SQL Server는 즉시 추가 메모리를 인식하고 필요한 경우 이를 활용합니다.

AWE를 사용하는 방법은 Windows Server 2003 설명서를 참조하십시오.

'SQL Server 2008' 카테고리의 다른 글

트랜잭션 로그 파일 없이 복구하기  (0) 2009.12.18
DATABASE 생선 옵션  (0) 2009.12.18
Analyze and Fix Index Fragmentation in SQL Server 2008  (0) 2008.12.02
GROUPING SETS  (0) 2008.11.05
SQL2008 설치하기  (0) 2008.10.07

'SQL Server 2008' 카테고리의 다른 글

DATABASE 생선 옵션  (0) 2009.12.18
AWE 설정  (0) 2009.03.06
GROUPING SETS  (0) 2008.11.05
SQL2008 설치하기  (0) 2008.10.07
Accelerated SQL Server 2008  (0) 2008.08.07

GROUPING SETS


-- GROUPING SETS

-- Grouping Sets in SQL Server 2008<?xml:namespace prefix = o />

-- link : http://www.sql-server-performance.com/articles/dba/Grouping_Sets_in_SQL_Server_2008_p1.aspx

 

Use master

GO

 

IF  EXISTS (SELECT name FROM sys.databases WHERE name = N'GroupingSetsDemo')

DROP DATABASE [GroupingSetsDemo]

GO

 

CREATE DATABASE GroupingSetsDemo

GO

 

USE GroupingSetsDemo

GO

 

/* Drop CricketTeams Table if already exists */

IF OBJECT_ID (N'dbo.CricketTeams', N'U') IS NOT NULL

    DROP TABLE dbo.CricketTeams;

GO

 

/* Create CricketTeams Table */

CREATE TABLE dbo.CricketTeams

(   

    CricketTeamID TINYINT NOT NULL PRIMARY KEY,

    CricketTeamShortCode NVARCHAR(30), 

    CricketTeamCountry NVARCHAR(30),

    CricketTeamContinent NVARCHAR(50)

)

GO

 

/* Populate the CricketTeams Table  */

INSERT INTO CricketTeams (CricketTeamID,CricketTeamShortCode,CricketTeamCountry,CricketTeamContinent)

VALUES (1, 'AUS', 'Australia', 'Australia')

GO

 

INSERT INTO CricketTeams (CricketTeamID,CricketTeamShortCode,CricketTeamCountry,CricketTeamContinent)

VALUES (2, 'IND', 'India', 'Asia')

GO

 

INSERT INTO CricketTeams (CricketTeamID,CricketTeamShortCode,CricketTeamCountry,CricketTeamContinent)

VALUES (3, 'PAK', 'Pakistan', 'Asia')

GO

 

INSERT INTO CricketTeams (CricketTeamID,CricketTeamShortCode,CricketTeamCountry,CricketTeamContinent)

VALUES (4, 'SRL', 'Srilanka', 'Asia')

GO

 

INSERT INTO CricketTeams (CricketTeamID,CricketTeamShortCode,CricketTeamCountry,CricketTeamContinent)

VALUES (5, 'SAF', 'South Africa', 'Africa')

GO

 

INSERT INTO CricketTeams (CricketTeamID,CricketTeamShortCode,CricketTeamCountry,CricketTeamContinent)

VALUES (6, 'ZIM',  'Zimbabwe', 'Africa')

GO

 

 

USE GroupingSetsDemo

GO

 

SELECT CricketTeamShortCode, COUNT(*) FROM CricketTeams

GROUP BY CricketTeamShortCode

GO

 

SELECT CricketTeamCountry, COUNT(*) FROM CricketTeams

GROUP BY CricketTeamCountry

GO

 

SELECT CricketTeamContinent, COUNT(*) FROM CricketTeams

GROUP BY CricketTeamContinent

GO

 

-- SQL2005

Use GroupingSetsDemo

GO

 

SELECT CricketTeamContinent, COUNT(*) FROM CricketTeams

GROUP BY CricketTeamContinent

 

UNION ALL

 

SELECT CricketTeamCountry, COUNT(*) FROM CricketTeams

GROUP BY CricketTeamCountry

 

UNION ALL

 

SELECT CricketTeamShortCode, COUNT(*) FROM CricketTeams

GROUP BY CricketTeamShortCode

GO

 

--Result

CricketTeamContinent     (No column name)

Africa    2

Asia      3

Australia           1

Australia           1

India     1

Pakistan 1

South Africa      1

Srilanka 1

Zimbabwe         1

AUS      1

IND      1

PAK      1

SAF      1

SRL      1

ZIM      1

 

-- Using Grouping Sets Clause Introduced in SQL Server 2008

Use GroupingSetsDemo

GO

 

/* Using the Grouping Sets clause introduced in SQL Server 2008 */

-- 집계를 위한 그룹핑 지원이 가능하다뉘..ㅎㅎㅎㅎ

 

SELECT CricketTeamShortCode, CricketTeamCountry, CricketTeamContinent, Count(*) AS Count

FROM CricketTeams

GROUP BY GROUPING SETS (   -- grouping set

      (CricketTeamShortCode),

      (CricketTeamCountry),

      (CricketTeamContinent),

      ()

)

ORDER BY CricketTeamShortCode, CricketTeamCountry, CricketTeamContinent

GO

 

-- result

CricketTeamShortCode     CricketTeamCountry        CricketTeamContinent     Count

NULL    NULL    NULL    6

NULL    NULL    Africa    2

NULL    NULL    Asia      3

NULL    NULL    Australia           1

NULL    Australia           NULL    1

NULL    India     NULL    1

NULL    Pakistan NULL    1

NULL    South Africa      NULL    1

NULL    Srilanka NULL    1

NULL    Zimbabwe         NULL    1

AUS      NULL    NULL    1

IND      NULL    NULL    1

PAK      NULL    NULL    1

SAF      NULL    NULL    1

SRL      NULL    NULL    1

ZIM      NULL    NULL    1

 

점점많이 좋아지는 군요...^^

가끔 집계를 위해서 쓸때 좋을듯.ㅎㅎ

 

 

'SQL Server 2008' 카테고리의 다른 글

AWE 설정  (0) 2009.03.06
Analyze and Fix Index Fragmentation in SQL Server 2008  (0) 2008.12.02
SQL2008 설치하기  (0) 2008.10.07
Accelerated SQL Server 2008  (0) 2008.08.07
델서버 + 윈도서버2008 + 시퀄2008  (0) 2008.07.21