테이블 파티션의 SQL 분할/병합 : 구현하기 가장 좋은 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/160128

  •  03-07-2019
  •  | 
  •  

문제

MSDN의 Microsoft 기입 SQL 2005 파티션 변경에 대해 몇 가지 가능한 접근 방식이 나와 있습니다.

  • 원하는 파티션 기능이있는 새 파티션 된 테이블을 작성한 다음 삽입물을 사용하여 기존 테이블의 데이터를 새 테이블에 삽입하십시오.
  • 힙에 분할 된 클러스터 된 인덱스를 만듭니다
  • DROP ENDICATION = ON CLAUSE와 함께 TransAct-SQL Create Index 문을 사용하여 기존 파티션 된 인덱스를 삭제하고 재구성하십시오.
  • ALTER PARTITION 함수 명령문을 수행하십시오.

데이터의 날짜 (월별 파티션과 같은)를 기준으로 파티션을 갖춘 대규모 DB (수백만 레코드)의 가장 효율적인 방법은 1-2 년에 걸쳐 데이터가 퍼지는 가장 효율적인 방법이 무엇입니까?

또한 최근 정보 (읽기)에 주로 액세스하는 경우 지난 X 일 동안 파티션을 유지하는 것이 합리적이며 나머지 데이터는 다른 파티션이 될 것입니까? 아니면 나머지 데이터를 분할하는 것이 더 낫습니까 (날짜 범위에 따라 임의의 액세스에 대해)?

도움이 되었습니까?

해결책

첫 번째 접근 방식을 추천합니다. 새로운 파티션 테이블을 만들고 삽입하는 것이 좋습니다. 기존 테이블과 새 테이블을 비교할 수있는 사치를 제공하기 때문입니다. 두 가지 스타일의 테이블에 대해 쿼리 계획을 테스트하고 새로운 테이블 디자인으로 절단하기 전에 쿼리가 실제로 더 빠르는지 확인할 수 있습니다. 개선이 없거나 최종 결과를 해결하기 전에 여러 가지 분할 기능/체계를 시도해 볼 수 있습니다. 날짜 범위 이외의 다른 방법으로 분할하고 싶을 수도 있습니다. 날짜는 항상 효과적인 것은 아닙니다.

나는 6-7 년에 걸쳐 데이터가 퍼져있는 300-500m 행 테이블로 파티셔닝을했으며, 테이블 insert 접근법은 내가 가장 유용한 것으로 밝혀졌습니다.

파티션 방법에 대해 물었습니다. 가장 좋은 대답은 쿼리가 단일 파티션에 도달하도록 파티션을 설계하는 것입니다. 최근 데이터에 쿼리를 집중시키는 경향이 있고, 해당 날짜 필드에서 클로스를 필터링하면 가장 최근 X 일 동안 별도의 파티션이 있습니다.

WHERE 절에 분할 된 필드를 지정해야합니다. 해당 필드를 지정하지 않으면 쿼리가 데이터를 얻기 위해 모든 파티션에 도달 할 것입니다. 그 시점에서 성능 이점이 없습니다.

도움이되기를 바랍니다! 나는 많은 파티셔닝을했으며, 테이블 구조 및 쿼리의 몇 가지 예를 게시하려면 환경에 대한 더 나은 답변을 얻는 데 도움이 될 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top