2017-04-20 1 views
1

1 억 8 천만 개가 넘는 행이있는 테이블이 있습니다.SQL Server 분할 및 인덱스

나는 색인을 포함하여 스캔을 줄이기 위해 테이블 ​​파티션을 고려 해왔다. 분할 기준으로 간주 한 열 중 하나가 STATE입니다. 이 테이블은 트랜잭션 테이블이 아니므로 분할 할 날짜 열이 없습니다. 우리는 날짜를 기준으로 많은 선택을하지 않습니다.

제 질문은 누구도 날짜 대신 문자열 값 열에서 테이블을 분할 한 적이 있습니까? 그렇다면 그렇게하기위한 성능 고려 사항은 무엇입니까?

감사합니다.

+3

인덱스가 파티션보다 더 나은 선택 일 수 있습니다. 그러나 질의의 모양,'STATE'에 의한 값의 분포,'STATE'의 업데이트 빈도 등에 대한 더 많은 정보를 제공해야합니다. –

+1

작업 부하에 따라 다릅니다 (실행하는 쿼리). 단일 상태에서만 검색하는 많은 쿼리가있는 경우이 방법이 좋습니다. 주에서 검색어를 검색하지 않거나 대부분의 주에서 검색어를 검색하지 않는다면 도움이되지 않을 것입니다. 날짜가 항상 유일한 이유는 작업량의 특성인데, 대부분의 사람들은 최근 날짜에 쿼리를 실행하기 때문입니다. 색인을 추가하기 전에 작업 부하를 이해하고 메트릭스를 취해야합니다. 또한 columnstore 인덱스를 고려해야합니다. –

답변

0

예. 사전 순으로 분할 할 수 있습니다. 보기 here.

그러나 목표가 쿼리 성능을 향상시키는 것이라면 테이블 분할이 올바른 솔루션이 될지 확신하지 못합니다. 테이블 파티셔닝의 주요 용도는 대량 데이터로드 및 아카이빙 속도를 높이는 것입니다. 레무스 Rusana - MS SQL 서버 개발자 팀 구성원 - 매우 similar question here, 견적 ...

파티션이 쿼리 성능을 위해 수행되지 않습니다 대답했다. 파티셔닝을 사용하면 성능이 항상 악화 될 수 있으므로 최선의 결과는 큰 회귀는 아니지만 결코 개선되지는 않을 것입니다.

그리고 그것은 SQL Server Dev 팀의 것입니다. 물론 에지 파티션이 쿼리 성능을 향상시키는 경우가있을 수 있지만 이는 하나처럼 보이지 않습니다.

다행히도 성능 향상을 위해 파티셔닝 이외에도 많은 옵션이 있습니다. 검색어 최적화는 약간의 예술이므로 질문에 대한 답변을 얻으려면 더 많은 세부 정보가 필요합니다. 테이블은 얼마나 넓습니까? 예제 쿼리가 있습니까? 데이터 배포 (덩어리) 란 무엇입니까?

당신이 말한 것, 즉 거래 테이블이 아닙니다. 인덱스를 만들면 안전한 내기처럼 들릴 수 있습니다. 데이터베이스 DML 성능 (업데이트/삽입/삭제)에 부정적인 영향을 미치지 않고 걱정할 필요가 없습니다. 추가 할 지표를 조사하기 위해 SSMS를 시작하고 실제 실행 계획 표시 버튼을 클릭 한 다음 문제가되는 쿼리 중 하나를 실행합니다. 이제 실행 계획을 살펴보십시오. 찾은 후 missing indices을 추가하십시오. 희망이 도움이됩니다. 행운을 빕니다!

TL : DR 파티셔닝은 쿼리 성능을 향상시키지 않습니다. 인덱스를 사용해보십시오.