데이터베이스 통계 란 무엇이며 어떻게 활용할 수 있습니까?


18

SQL Server가 기본적으로 유지하는 통계에 대한 언급을 들었습니다. 추적 대상은 무엇이며이 정보를 사용하여 데이터베이스를 개선 할 수 있습니까?

답변:


21

통계는 단순히 쿼리 최적화 프로그램이보다 나은 의사 결정을 내리는 데 도움이되는 일종의 동적 메타 데이터입니다. 예를 들어, 테이블에 열이 12 개 뿐인 경우 조회를 수행 할 인덱스는 없습니다. 항상 전체 테이블 스캔을 수행하는 것이 좋습니다. 그러나 동일한 테이블이 백만 행으로 커지면 인덱스를 사용하는 것이 좋습니다. 그러나 고유 값이 거의없는 열에서 해당 테이블을 쿼리하는 경우 (예 : "M"또는 "F"만 포함하는 "성"열일 수 있음) 실제로 FTS가 더 좋을 수 있습니다. 결과 집합을 작성하려면 어쨌든 블록을 검색해야합니다. 이제 테이블이 99 % "M"이고 1 % "F"라고 말하면 FTS를 사용하거나 다른 경우에는 인덱스를 사용해야합니다. 같은 테이블, 같은 쿼리, 테이블의 내용에 따라 네 가지 다른 쿼리 계획이있을 수 있습니다. 이러한 종류의 통계는 "통계"이며 각 데이터베이스마다 개별적입니다. 동일한 테이블 및 인덱스 구조를 가진 두 데이터베이스도 다른 통계를 갖습니다.

요약하면 최신 데이터베이스 엔진에는 두 가지 종류의 쿼리 최적화가 있습니다. SQL 다시 작성 (컴파일러가 C를 다시 작성하여보다 효율적으로 작성하는 것과 같은 규칙 기반 최적화)과 데이터의 올바른 경로 선택 (비용 기반 최적화) (런타임에 핫스팟을 식별하는 JIT 컴파일러와 같은). 쿼리 옵티마이 저가 명백히 잘못된 일을하는 경우 (예 : 인덱스가 더 좋다는 것을 알고 FTS를 선택하는 경우)에만 걱정할 필요 가 있습니다.


2
+1 더 잘 설명 할 수 없었습니다. 통계는 최신 상태로 유지되는 경우에만 도움이된다는 것을 기억하는 것이 중요합니다. 이는 자동 업데이트 통계 또는 정기적으로 예약 된 (매일 / 매주) 통계 업데이트 명령으로 수행 할 수 있습니다. 또한 인덱스 재 구축은 통계 업데이트를 자동으로 수행합니다.
매트 M

5

이들은 쿼리 최적화 프로그램 (MSDN의 백서)에서 인덱스 및 / 또는 열의 값 분포를 추적 하는 데 사용됩니다 .

당신의 유일한 관심사는 정기적으로 업데이트하는 것입니다 : DB 엔진을 그대로 두십시오.


2
항상 그런 것은 아닙니다. 통계를 수동으로 작성하면 쿼리 성능을 향상시키는 데 도움이되는 경우가 있습니다.
mrdenny

@mrdenny : 실생활에서이 작업을 얼마나 자주 했습니까? 매우 드물다. 나는 IIRC를하지 않았다. 통계가 필요하면 통계가있는 색인이 필요하다고 주장 할 수 있습니다. CREATE STATISTICS에 따라 열 통계 만 작성할 수 있습니다 . OP가 통계에 관해 물어봐야한다면 이것이 공정한 일이라고 말하고 싶습니다.
gbn

1
나는 그것을 몇 번했지만 자주하지는 않았습니다. 통계 업데이트 만이 유일한 것은 아니기 때문에 "귀하의 관심사는 정기적으로 업데이트해야합니다"라는 문구에 반대했습니다.
mrdenny
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.