본문 바로가기

Database/Microsoft SQL Server

통계 / Statistics

오늘은 통계에 대해서 알아보도록 하겠습니다. 


[정의]

사전적 의미는 찾지 못했습니다. 추가하면 좋을 정보가 있다면 제보 부탁 드리겠습니다. 

저는 아래와 같이 이해했습니다.

'MS SQL에서의 통계는 Optimizer가 최적화된 실행계획을 만들기 위해 참조하는 정보이다.'


[통계를 이해하기 위해서는 이것만은 알아두자]

  • STATS_DATE / 테이블 또는 인덱싱된 뷰의 통계에 대한 가장 최근의 업데이트 날짜를 반환합니다.

=>STATS_DATE ( object_id , stats_id )

  • sys.indexes / 테이블, 뷰 또는 테이블 반환 함수와 같은 테이블 형식 개체의 인덱스 또는 힙당 하나의 행을 포함합니다.
  • sys.stats / 데이터베이스의 테이블, 인덱스 및 인덱싱된 뷰에 대한 각 통계 개체의 행을 포함합니다.
  • 기본값으로 [통계 자동 업데이트], [통계 자동 작성] 값은 True(on)으로 되어 있으며, 테이블 데이터의 약 20%정도 변경이 이루어져야 자동 업데이트를 하게 된다.


[통계 정보 확인하기]

구문

DBCC SHOW_STATISTICS ( table_or_indexed_view_name , target )

[ WITH [ NO_INFOMSGS ] < option > [ , n ] ]

< option > :: =

STAT_HEADER | DENSITY_VECTOR | HISTOGRAM | STATS_STREAM


실행화면

=>컬럼값의 의미를 정확히 이해해야 한다.


[통계 생성, 삭제, 업데이트]

생성 / create statistics

  • CREATE STATISTICS statistics_name on {table_or indexed_view_name} (column_name) 

삭제 / drop statistics

  •  Purchasing.Vendor 테이블의 VendorCredit 통계 삭제

DROP STATISTICS Purchasing.Vendor.VendorCredit

업데이트 / update statistics

  • EXEC sp_updatestats / 모든 통계 업데이트 
  • UPDATE STATISTICS Sales.SalesOrderDetail; / Sales.SalesOrderDetail 테이블에 있는 모든 통계 업데이트
  • Sales.SalesOrderDetail 테이블의 AK_SalesOrderDetail_rowguid 인덱스에 대한 통계 업데이트

UPDATE STATISTICS Sales.SalesOrderDetail AK_SalesOrderDetail_rowguid

[참고 사이트]

DBCC SHOW_STATISTICS(Transact-SQL)

http://msdn.microsoft.com/ko-kr/library/ms174384(v=sql.105).aspx

STATS_DATE(Transact-SQL)

http://msdn.microsoft.com/ko-kr/library/ms190330(v=sql.105).aspx

CREATE STATISTICS(Transact-SQL)

http://msdn.microsoft.com/ko-kr/library/ms188038(v=sql.105).aspx

UPDATE STATISTICS(Transact-SQL)

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