UPDATE STATISTICS(Transact-SQL)

업데이트: 2006년 12월 12일

지정된 테이블이나 인덱싱된 뷰에서 하나 이상의 통계 그룹(컬렉션)의 키 값 배포에 대한 정보를 업데이트합니다. 열에서 통계를 만들려면 CREATE STATISTICS(Transact-SQL)를 참조하십시오.

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

구문

UPDATE STATISTICS table | view 
    [ 
        { 
            { index | statistics_name }
          | ( { index |statistics_name } [ ,...n ] ) 
                }
    ] 
    [    WITH 
        [ 
            [ FULLSCAN ] 
            | SAMPLE number { PERCENT | ROWS } ] 
            | RESAMPLE 
            | <update_stats_stream_option> [ ,...n ]
        ] 
        [ [ , ] [ ALL | COLUMNS | INDEX ] 
        [ [ , ] NORECOMPUTE ] 
    ] ;

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

인수

  • table | view
    통계를 업데이트할 테이블이나 인덱싱된 뷰의 이름입니다. 테이블 또는 뷰 이름은 식별자에 대한 규칙을 따라야 합니다. 자세한 내용은 식별자를 개체 이름으로 사용을 참조하십시오. 인덱스 이름은 각 데이터베이스에서 고유하지 않기 때문에 table 또는 view를 지정해야 합니다. 필요에 따라 데이터베이스, 테이블 또는 뷰 스키마도 지정할 수 있습니다.
  • index
    통계가 업데이트되는 인덱스입니다. 인덱스 이름은 식별자에 대한 규칙을 따라야 합니다. index를 지정하지 않으면 지정된 테이블이나 인덱싱된 뷰의 배포 통계가 모두 업데이트됩니다. 여기에는 CREATE STATISTICS 문을 사용하여 만든 통계, 자동으로 생성된 통계 및 인덱스 작성 시 함께 생성된 통계가 포함됩니다.

    개체의 인덱스에 대한 보고서를 표시하려면 sp_helpindex를 실행하고 테이블 또는 뷰 이름을 지정하십시오.

  • statistics_name
    업데이트할 통계 그룹(컬렉션)의 이름입니다. 통계 이름은 식별자에 대한 규칙을 따라야 합니다. 통계 그룹을 만드는 방법은 CREATE STATISTICS(Transact-SQL)를 참조하십시오.
  • FULLSCAN
    통계를 수집하기 위해 table이나 view의 모든 행을 읽어야 하는지를 지정합니다. FULLSCAN을 지정하면 SAMPLE 100 PERCENT와 같은 동작이 수행됩니다. FULLSCAN은 SAMPLE 옵션과 함께 사용할 수 없습니다.
  • SAMPLE number { PERCENT | ROWS }
    보다 큰 테이블이나 뷰에 대한 통계를 수집할 때 샘플링할 행의 수 또는 테이블이나 인덱싱된 뷰의 백분율을 지정합니다. number는 PERCENT이든 ROWS이든 관계없이 정수여야 합니다. 좀 더 큰 테이블이나 뷰에 대해 기본적 샘플링 동작을 사용하려면 PERCENT 또는 ROWS에서 SAMPLE number를 사용합니다. SQL Server 2005 데이터베이스 엔진에서는 값의 최소 수를 샘플링하여 유용한 통계를 얻을 수 있습니다. PERCENT, ROWS 또는 number 옵션을 사용한 결과 샘플링되는 행의 수가 너무 적을 경우 데이터베이스 엔진에서는 테이블이나 뷰에서 기존의 행의 수에 따라 자동으로 샘플링을 수정합니다. 약 1,000개 이상의 데이터 페이지가 샘플링됩니다. PERCENT, ROWS 또는 number 옵션이 유용한 샘플에 필요한 값보다 더 많은 값을 생성하는 경우 데이터베이스 엔진에서는 요청된 샘플 양에 맞추려고 노력합니다. 그러나 모든 데이터 페이지를 검색하여 샘플링하기 때문에 실제 샘플 크기는 지정된 양과 정확히 일치하지 않을 수 있습니다. 0 PERCENT 또는 ROWS를 지정하면 결과는 빈 통계 집합이 됩니다.

    [!참고] 기본 동작은 대상 테이블이나 인덱싱된 뷰에서 샘플 검색을 수행하는 것입니다. 데이터베이스 엔진은 자동으로 필요한 샘플 크기를 계산합니다.

  • RESAMPLE
    인덱스를 포함하여 기존의 모든 통계에 대해 상속된 샘플링 비율을 사용하여 통계를 수집하도록 지정합니다. 샘플링 비율을 사용한 결과 샘플링되는 행의 수가 너무 적을 경우 데이터베이스 엔진은 테이블이나 뷰에서 기존의 행의 수에 따라 샘플링을 자동으로 수정합니다.
  • ALL | COLUMNS | INDEX
    UPDATE STATISTICS 문이 열 통계, 인덱스 통계 또는 기존의 모든 통계에 영향을 주는지 여부를 지정합니다. 옵션을 지정하지 않으면 UPDATE STATISTICS 문이 모든 통계에 영향을 줍니다. UPDATE STATISTICS 문마다 하나의 유형(ALL, COLUMNS 또는 INDEX)만 지정할 수 있습니다.
  • NORECOMPUTE
    오래된 통계를 자동으로 다시 계산하지 않도록 지정합니다. 통계는 인덱싱된 열에서 수행된 INSERT, UPDATE, DELETE 등의 작업 수에 따라 오래된 통계가 됩니다. 이 옵션을 지정하면 데이터베이스 엔진에서 자동 통계 다시 작성 기능이 해제됩니다. 자동 통계 다시 계산을 복원하려면 NORECOMPUTE 옵션 없이 UPDATE STATISTICS를 다시 실행하거나 sp_autostats를 실행하십시오.

    ms187348.note(ko-kr,SQL.90).gif중요:
    자동 통계 다시 계산 기능을 해제하면 지정한 테이블과 연관된 쿼리에 대해 쿼리 최적화 프로그램에서 최적의 전략을 선택하지 못할 수도 있습니다.
  • <update_stats_stream_option>
    정보 제공용으로만 식별됩니다. 지원되지 않습니다. 향후 호환성은 보장되지 않습니다.

주의

데이터베이스 엔진은 각 인덱스의 키 값 배포에 관한 통계를 보관하고 이 통계를 사용하여 쿼리 처리에서 사용할 인덱스를 결정합니다. 사용자는 CREATE STATISTICS 문을 사용하여 인덱싱되지 않은 열에서 통계를 만들 수 있습니다. 쿼리 최적화는 다음과 같이 배포 단계의 정확도에 따라 달라집니다.

  • 인덱스에서 키 값이 크게 변경된 경우 해당 인덱스에서 UPDATE STATISTICS를 다시 실행합니다.
  • 인덱싱된 열에서 많은 데이터가 추가, 변경 또는 제거된 경우, 즉 키 값의 배포가 변경된 경우 또는 TRUNCATE TABLE 문을 사용하여 테이블을 자른 다음 다시 채운 경우에 UPDATE STATISTICS를 사용합니다.

통계를 마지막으로 업데이트한 시기를 알려면 STATS_DATE 함수를 사용하십시오.

UPDATE STATISTICS WITH RESAMPLE은 현재 샘플링 속도로 테이블의 모든 통계를 업데이트합니다. 즉, 인덱스가 작성될 때 전체 검색으로 생성되며 인덱스에 연결된 통계의 경우 전체 테이블 검색을 새로 고쳐야 함을 의미합니다. 특히 많은 인덱스가 있는 분할된 대형 테이블의 경우 이 작업에 매우 많은 시간이 소요될 수 있습니다. 각 통계를 새로 고치려면 많은 양의 데이터를 읽어야 합니다. 이 문제를 피하려면 필요한 경우에만 통계를 업데이트하는 sp_updatestats(Transact-SQL)를 사용하십시오.

해당 열에서 인덱스를 만들 수 있는 조건이 충족되는 경우에만 계산 열을 사용하여 테이블에서 통계를 만들거나 업데이트할 수 있습니다. 계산 열에서 인덱스를 만들 경우 요구 사항 및 제한 사항은 CREATE INDEX(Transact-SQL)를 참조하십시오.

자동 통계 다시 계산 기능을 해제할 경우 수동으로 통계 정보를 업데이트해야 합니다.

[!참고] UPDATE STATISTICS 문은 NORECOMPUTE 절이 지정되지 않은 경우 대상 테이블 또는 뷰에서 자동 통계 업데이트를 다시 설정합니다.

사용 권한

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

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

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

USE AdventureWorks;
GO
UPDATE STATISTICS Sales.SalesOrderDetail;
GO

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

다음 예에서는 SalesOrderDetail 테이블의 AK_SalesOrderDetail_rowguid 인덱스에 대한 배포 정보만 업데이트합니다.

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

3. 50% 샘플링을 사용하여 특정 통계 그룹(컬렉션)에 대한 통계 업데이트

다음 예에서는 Product 테이블의 NameProductNumber 열에 대한 통계 그룹을 만든 후 업데이트합니다.

USE AdventureWorks;
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 테이블에서 모든 행을 전체 검색한 다음 통계 그룹(컬렉션)에 대한 자동 통계 업데이트를 해제합니다.

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

참고 항목

참조

ALTER DATABASE(Transact-SQL)
CREATE INDEX(Transact-SQL)
CREATE STATISTICS(Transact-SQL)
sys.stats(Transact-SQL)
sys.stats_columns(Transact-SQL)
커서(Transact-SQL)
DBCC SHOW_STATISTICS(Transact-SQL)
DROP STATISTICS(Transact-SQL)
EXECUTE(Transact-SQL)
EVENTDATA(Transact-SQL)
sp_autostats(Transact-SQL)
sp_createstats(Transact-SQL)
sp_helpindex(Transact-SQL)
sp_updatestats(Transact-SQL)
STATS_DATE(Transact-SQL)

관련 자료

함수(데이터베이스 엔진)

도움말 및 정보

SQL Server 2005 지원 받기

변경 내역

릴리스 내역

2006년 12월 12일

변경된 내용
  • 주의에서 "명시적 또는 암시적 트랜잭션에서는 UPDATE STATISTICS가 허용되지 않습니다"라는 문장을 제거했습니다. SQL Server 2005에서는 이 제한 사항이 없습니다.