큰 파티션 된 OLAP 테이블을 관리 할 권한이 있습니다. 이 테이블을 검토하는 동안 인덱스 중 하나가 파티션 구성표와 일치하지 않는 것으로 나타났습니다. 저자가 이용할 수없고 신중하게 조작 된 Google 검색에서 유용한 결과가 반환되지 않았기 때문에 의도적 인 것인지 실수인지 확실하지 않습니다.
SQL Server 2008에서 인덱스를 파티션 정렬하지 않는 이유가 있습니까?
큰 파티션 된 OLAP 테이블을 관리 할 권한이 있습니다. 이 테이블을 검토하는 동안 인덱스 중 하나가 파티션 구성표와 일치하지 않는 것으로 나타났습니다. 저자가 이용할 수없고 신중하게 조작 된 Google 검색에서 유용한 결과가 반환되지 않았기 때문에 의도적 인 것인지 실수인지 확실하지 않습니다.
SQL Server 2008에서 인덱스를 파티션 정렬하지 않는 이유가 있습니까?
답변:
파티션 기본 오브젝트에 (고유하지 않은) 인덱스를 분할하지의 주요 장점은 주위에 작동한다는 것입니다 오랜 쿼리 최적화 제한 등의 주문 데이터 요청과 관련 MIN
, MAX
또는 TOP (n)
쿼리.
분할 된 인덱스에서 최적화 프로그램은 일반적으로 변환 할 수 없습니다 MIN
, MAX
또는 TOP (n)
같은 동작으로 파티션 당 , 당 파티션 부분 집계를 통해 최종 글로벌 집계 하였다. 대신 옵티마이 저는 인덱스의 모든 파티션을 스캔하는 실행 계획을 선택합니다. 이에 대한 예외는 집계 열 또는 상위 작업이 분할 열에 지정된 단일 경우입니다.
정렬되지 않은 인덱스를 가지지 않는 매우 좋은 이유 가 있다고 언급해야 합니다. 정렬되지 않은 인덱스를 사용하도록 선택하는 것은 매우 현명한 선택이어야합니다. 나는 과거에 (드물게) 스스로 해냈지만 혜택이 비용을 분명히 능가하거나 다른 합리적인 대안이없는 매우 구체적인 상황에서.
문제를 설명하는 Itzik Ben-Gan 의 기사.
정렬되지 않은 인덱스가 필요한 일부 제약 조건 (예 : 고유)에 대해서는 명백한 문제가 있습니다 .
다른 비 정렬 인덱스가 가지고보다 큰 비용을 (주로 그들이 스레드 당 파티션을가는 많은 병렬 연산자를 방지하고 대안 메모리 비싼) 따라서 나는 강하게 인덱스에 대해 조언한다. Paul이 제시 한 경우에도 정렬되지 않은 인덱스에 대해서는 조언하지 않습니다.
정렬되지 않은 인덱스는 파티션을 전환하는 파티셔닝의 주요 이점을 무효화합니다. 그것에 의존하지 않고 다른 이유로 파티션을 나누는 경우 (다른 저장소, 읽기 전용 파티션, 증분 통계 등) 계속해서 정렬되지 않은 indexex를 만드십시오.
정렬되지 않은 인덱스는 전체 테이블에 고유 제한 조건을 적용 할 수 있으므로 유용합니다. 또한 정렬되지 않은 인덱스는 분할 키가 암시 적 검색 접두사 일 필요는 없습니다. 10000 개의 파티션이 있고 파티션 키를 기반으로하지 않는 쿼리를 상상해보십시오. 인덱스가 정렬 된 경우 실행 계획은 10000 개의 파티션을 찾아야합니다. 다른 답변에는 추가 예가 있습니다.