다음을 통해 공유


UPDATE STATISTICS(Transact-SQL)

테이블 또는 인덱싱된 뷰에 대한 쿼리 최적화 통계를 업데이트합니다. 기본적으로 쿼리 최적화 프로그램은 필요할 때 통계를 업데이트하여 쿼리 계획을 향상시킵니다. 하지만 경우에 따라 사용자가 UPDATE STATISTICS 또는 sp_updatestats 저장 프로시저를 사용하여 기본 업데이트 주기보다 자주 통계를 업데이트하여 쿼리 성능을 향상시킬 수 있습니다.

통계를 업데이트하면 쿼리가 최신 통계로 컴파일되지만 쿼리도 다시 컴파일됩니다. 쿼리 계획 향상과 쿼리 재컴파일 소요 시간 간의 성능 균형을 유지해야 하므로 통계를 너무 자주 업데이트하지 않는 것이 좋습니다. 구체적인 성능 균형 유지의 정도는 응용 프로그램에 따라 달라집니다. UPDATE STATISTIC에서는 통계를 작성하기 위해 tempdb를 사용하여 행 샘플을 정렬할 수 있습니다.

적용 대상: SQL Server(SQL Server 2008 - 현재 버전), Windows Azure SQL 데이터베이스(최초 릴리스 - 현재 릴리스)

항목 링크 아이콘 Transact-SQL 구문 표기 규칙

구문

UPDATE STATISTICS table_or_indexed_view_name 
    [ 
        { 
            { index_or_statistics__name }
          | ( { index_or_statistics_name } [ ,...n ] ) 
                }
    ] 
    [    WITH 
        [ 
            FULLSCAN 
            | SAMPLE number { PERCENT | ROWS } 
            | RESAMPLE 
              [ ON PARTITIONS ( { <partition_number> | <range> } [, …n] ) ]
            | <update_stats_stream_option> [ ,...n ]
        ] 
        [ [ , ] [ ALL | COLUMNS | INDEX ] 
        [ [ , ] NORECOMPUTE ] 
        [ [ , ] INCREMENTAL = { ON | OFF } ]
    ] ;

<update_stats_stream_option> ::=
    [ STATS_STREAM = stats_stream ]
    [ ROWCOUNT = numeric_constant ]
    [ PAGECOUNT = numeric_contant ]

인수

  • table_or_indexed_view_name
    통계를 업데이트할 대상이 되는 테이블 또는 인덱싱된 뷰의 이름입니다.

  • index_or_statistics_name
    통계를 업데이트할 인덱스 이름 또는 업데이트할 통계의 이름입니다. index_or_statistics_name을 지정하지 않으면 쿼리 최적화 프로그램에서 테이블 또는 인덱싱된 뷰에 대한 모든 통계를 업데이트합니다. 여기에는 CREATE STATISTICS 문을 사용하여 생성된 통계, AUTO_CREATE_STATISTICS가 설정되어 생성된 단일 열 통계 및 인덱스에 대해 생성된 통계 등이 포함됩니다.

    AUTO_CREATE_STATISTICS에 대한 자세한 내용은 ALTER DATABASE SET 옵션(Transact-SQL)를 참조하십시오. 테이블 또는 뷰에 대한 모든 인덱스를 보려면 sp_helpindex를 사용하면 됩니다.

  • FULLSCAN
    테이블 또는 인덱싱된 뷰에 있는 모든 행을 검색하여 통계를 계산합니다. FULLSCAN과 SAMPLE 100 PERCENT의 결과는 같습니다. FULLSCAN은 SAMPLE 옵션과 함께 사용할 수 없습니다.

  • SAMPLE number { PERCENT | ROWS }
    쿼리 최적화 프로그램에서 통계를 업데이트할 때 사용할 테이블이나 인덱싱된 뷰에 있는 행의 비율이나 개수를 대략적으로 지정합니다. PERCENT의 경우 number가 0부터 100까지일 수 있고, ROWS의 경우 number가 0부터 총 행 수까지일 수 있습니다. 쿼리 최적화 프로그램에서 샘플링하는 실제 행의 비율이나 개수는 지정된 비율이나 개수와 일치하지 않을 수 있습니다. 예를 들어, 쿼리 최적화 프로그램에서는 데이터 페이지의 모든 행을 검색합니다.

    SAMPLE은 기본 샘플링을 기반으로 하는 쿼리 계획이 만족스럽지 못한 특별한 경우에 유용합니다. 대부분의 경우에는 기본적으로 쿼리 최적화 프로그램에서 고품질의 쿼리 계획을 만들기 위해 필요에 따라 샘플링을 사용하고 통계적으로 중요한 샘플 크기를 결정하기 때문에 SAMPLE을 지정할 필요가 없습니다.

    SAMPLE은 FULLSCAN 옵션과 함께 사용할 수 없습니다. SAMPLE과 FULLSCAN을 둘 다 지정하지 않으면 기본적으로 쿼리 최적화 프로그램에서 샘플링된 데이터를 사용하고 샘플 크기를 계산합니다.

    0 PERCENT 또는 0 ROWS로 지정하지 않는 것이 좋습니다. 0 PERCENT 또는 0 ROWS로 지정하면 통계 데이터가 포함되지 않은 빈 통계 개체가 업데이트됩니다.

  • RESAMPLE
    가장 최근의 샘플링 주기를 사용하여 각 통계를 업데이트합니다.

    RESAMPLE을 사용하면 전체 테이블 검색이 수행될 수 있습니다. 예를 들어 인덱스에 대한 통계에서는 샘플링 주기에 전체 테이블 검색을 사용합니다. 샘플 옵션(SAMPLE, FULLSCAN, RESAMPLE)을 지정하지 않으면 기본적으로 쿼리 최적화 프로그램에서 데이터를 샘플링하여 샘플 크기를 계산합니다.

  • ON PARTITIONS ( { <partition_number> | <range> } [, …n] ) ]
    ON PARTITIONS 절에 지정된 파티션에 적용되는 리프 수준 통계를 강제로 다시 계산한 후 병합하여 전역 통계를 작성합니다. 서로 다른 샘플링 주기로 작성된 파티션 통계는 병합할 수 없으므로 WITH RESAMPLE이 필요합니다.

    적용 대상: SQL Server 2014 - SQL Server 2014.

  • ALL | COLUMNS | INDEX
    기존의 모든 통계, 하나 이상의 열에 대해 생성된 통계 또는 인덱스에 대해 생성된 통계를 업데이트합니다. 아무 옵션도 지정하지 않은 UPDATE STATISTICS 문은 테이블 또는 인덱싱된 뷰의 모든 통계를 업데이트합니다.

  • NORECOMPUTE
    지정된 통계에 대해 자동 통계 업데이트 옵션인 AUTO_UPDATE_STATISTICS를 비활성화합니다. 이 옵션을 지정하지 않으면 쿼리 최적화 프로그램에서 이 통계 업데이트를 완료하고 이후 업데이트부터 비활성화합니다.

    AUTO_UPDATE_STATISTICS 옵션 동작을 다시 활성화하려면 UPDATE STATISTICS를 NORECOMPUTE 옵션 없이 다시 실행하거나 sp_autostats를 실행합니다.

    경고

    이 옵션을 사용하면 최적이 아닌 쿼리 계획이 생성될 수 있습니다.이 옵션은 자격 있는 시스템 관리자가 꼭 필요한 경우에만 사용하는 것이 좋습니다.

    AUTO_STATISTICS_UPDATE 옵션에 대한 자세한 내용은 ALTER DATABASE SET 옵션(Transact-SQL)을 참조하십시오.

  • INCREMENTAL = { ON | OFF }
    ON으로 설정된 경우 파티션 통계별로 통계가 다시 작성됩니다. OFF로 설정된 경우 통계 트리가 삭제되고 SQL Server에서 통계를 다시 계산합니다. 기본값은 OFF입니다.

    파티션별 통계가 지원되지 않을 경우 오류가 생성됩니다. 다음 통계 유형에 대해서는 증분 통계가 지원되지 않습니다.

    • 기본 테이블을 기준으로 파티션 정렬되지 않은 인덱스를 사용하여 작성된 통계입니다.

    • AlwaysOn 읽기 가능한 보조 데이터베이스에 대해 작성된 통계입니다.

    • 읽기 전용 데이터베이스에 대해 작성된 통계입니다.

    • 필터링된 인덱스에 대해 작성된 통계입니다.

    • 뷰에 대해 작성된 통계입니다.

    • 내부 테이블에 대해 작성된 통계입니다.

    • 공간 인덱스 또는 XML 인덱스를 사용하여 작성된 통계입니다.

    적용 대상: SQL Server 2014 - SQL Server 2014.

  • <update_stats_stream_option>
    정보를 제공하기 위해서만 확인됩니다. 지원되지 않습니다. 향후 호환성은 보장되지 않습니다.

주의

UPDATE STATISTICS를 사용하는 경우

UPDATE STATISTICS를 사용하는 경우에 대한 자세한 내용은 통계를 참조하십시오.

sp_updatestats를 사용하여 모든 통계 업데이트

데이터베이스에 있는 모든 사용자 정의 및 내부 테이블에 대한 통계를 업데이트하는 방법은 sp_updatestats(Transact-SQL) 저장 프로시저를 참조하십시오. 예를 들어 다음 명령에서는 sp_updatestats를 호출하여 데이터베이스에 대한 모든 통계를 업데이트합니다.

EXEC sp_updatestats;

마지막 통계 업데이트 확인

통계가 마지막으로 업데이트된 시점을 확인하려면 STATS_DATE 함수를 사용합니다.

사용 권한

테이블이나 뷰에 대한 ALTER 권한이 필요합니다.

1.테이블에 대한 모든 통계 업데이트

다음 예에서는 SalesOrderDetail 테이블에서 모든 인덱스에 대한 통계를 업데이트합니다.

USE AdventureWorks2012;
GO
UPDATE STATISTICS Sales.SalesOrderDetail;
GO

2.인덱스에 대한 통계 업데이트

다음 예에서는 SalesOrderDetail 테이블의 AK_SalesOrderDetail_rowguid 인덱스에 대한 통계를 업데이트합니다.

USE AdventureWorks2012;
GO
UPDATE STATISTICS Sales.SalesOrderDetail AK_SalesOrderDetail_rowguid;
GO

3.50퍼센트 샘플링을 사용하여 통계 업데이트

다음 예에서는 Product 테이블의 Name 및 ProductNumber 열에 대한 통계를 만든 후 업데이트합니다.

USE AdventureWorks2012;
GO
CREATE STATISTICS Products
    ON Production.Product ([Name], ProductNumber)
    WITH SAMPLE 50 PERCENT
-- Time passes. The UPDATE STATISTICS statement is then executed.
UPDATE STATISTICS Production.Product(Products) 
    WITH SAMPLE 50 PERCENT;

4.FULLSCAN 및 NORECOMPUTE를 사용하여 통계 업데이트

다음 예에서는 Product 테이블의 Products 통계를 업데이트하고 Product 테이블의 모든 행을 전체 검색하며 Products 통계에 대한 자동 통계를 비활성화합니다.

USE AdventureWorks2012;
GO
UPDATE STATISTICS Production.Product(Products)
    WITH FULLSCAN, NORECOMPUTE;
GO

참고 항목

참조

ALTER DATABASE(Transact-SQL)

CREATE STATISTICS(Transact-SQL)

DBCC SHOW_STATISTICS(Transact-SQL)

DROP STATISTICS(Transact-SQL)

sp_autostats(Transact-SQL)

sp_updatestats(Transact-SQL)

STATS_DATE(Transact-SQL)

개념

통계