2008-10-09 3 views
14

그래서이 하나 개의 프로젝트를 위해, 우리는 정기적으로 (매 분 정도. 내가 사용하는 그들에 확인 "데이터베이스 엔진에서 검색어를 분석합니다."SQL 서버 통계

에서 실행되는 쿼리의 무리가 . 선택 * 처리 = '0'

처리하고, 각 쿼리가 1MM 기록과 함께 테이블에 < 1000 행을 반환해야합니다에 인덱스가 TABLEX에서

분석기 작성 추천 : 그들은 꽤 간단합니다 이것에 대한 몇 가지 통계 .... 그래서 제 질문은 : 통계는 무엇입니까? 그들은 정말로 도움이됩니까? 성능? 위와 같은 테이블에 얼마나 비싼가요?

결코 SQL Server 숙련 된 사용자라고는 결코 부끄럽지 않습니다 ... 그리고이 분석기를 처음 사용하는 사람입니다.

답변

24

통계는 SQL Server가 데이터를 가져 오는 방법의 실행 가능성을 결정하는 데 사용하는 통계입니다.

예를 들어 기본 키에만 클러스터형 인덱스가있는 테이블이 있다고 가정 해 보겠습니다. SELECT * FROM tablename WHERE col1=value을 실행할 때 SQL Server에는 테이블의 모든 행을 검색하여 일치하는 행을 찾는 옵션이 하나만 있습니다.

이제 col1에 인덱스를 추가하므로 SQL Server가 인덱스를 사용하여 일치하는 행을 찾지 만 항상 그렇지는 않습니다. 테이블에 200,000 개의 행이 있고 col1의 값이 1과 0 인 경우를 가정 해 봅니다. SQL Server가 인덱스를 사용하여 데이터를 찾을 때 인덱스는 클러스터 된 인덱스 위치로 되돌아가는 포인터를 포함합니다. 인덱싱 된 열에는 두 가지 값만 있기 때문에 SQL Server에서는 인덱스를 사용하는 것이 더 효과적이므로 테이블을 스캔하는 것이 더 적합하다고 판단합니다.

이제 테이블에 추가로 800,000 개의 데이터 행을 추가 하겠지만, 이번에는 col1의 값이 매우 다양합니다. 이제 SQL Server는 인덱스를 사용하여 테이블에서 끌어낼 항목을 제한 할 수 있으므로 유용한 인덱스입니다. SQL Server가 인덱스를 사용합니까?

에 따라 다릅니다. 그리고 그것은 통계입니다. 어느 시점에 AUTO UPDATE STATISTICS을 설정하면 서버가 색인 통계를 업데이트하고 사용할 수있는 아주 유용하고 유효한 색인임을 알립니다. 그러나 그 시점까지는 색인이 부적절한 것으로 간주하지 않을 것입니다.

통계의 한 가지 용도입니다. 그러나 또 다른 용도가 있으며 이는 지표와 관련이 없습니다. SQL Server는 테이블의 모든 열에 대한 기본 통계를 유지합니다. 가치가있는 데이터가 충분하면 SQL Server는 실제로 열에 임시 색인을 만들고 필터를 사용합니다. 기존 인덱스를 사용하는 것보다 시간이 오래 걸리지 만 전체 테이블 스캔보다 시간이 적습니다.

때로는 유용 할 수있는 열에 대한 특정 통계를 만드는 권장 사항을 얻을 수 있습니다. 인덱스가 아니지만 SQL Server에서 데이터를 반환하는 임시 인덱스를 만드는 것이 적합한 지 여부를 결정할 수 있도록 열의 데이터 샘플링을 추적합니다.

HTH

+0

"인덱스에 대한 통계를 업데이트하고 사용하기 아주 좋은 유효한 인덱스 알고 할 서버"- 무엇을 기반으로? 색인이 사용하기에 유효하지 않은 것으로 판단되는시기는 언제입니까? – BornToCode

0

SQL Server 2005에서 자동 작성 통계 및 자동 업데이트 통계를 설정하십시오. 데이터베이스가 이것을 아주 잘 처리하기 때문에 직접 작성하거나 유지 보수하는 것에 대해 걱정할 필요가 없습니다.