개발 버전 :Devel
지원되지 않은 버전 :12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3 / 8.2 / 8.1
이 문서는 지원되지 않는 버전의 PostgreSQL을위한 것입니다.
당신은에 대해 같은 페이지를 보려고 할 수 있습니다메이저 토토 사이트 PostgreSQL : 문서 : 17 : 5.12. 테이블 파티셔닝버전 또는 위에 나열된 다른 지원되는 버전 중 하나입니다.

5.10. 테이블 파티셔닝

PostgreSQL기본 테이블 파티셔닝을 지원합니다. 이 섹션에서는 데이터베이스 디자인의 일부로 파티셔닝을 구현하는 이유와 방법에 대해 설명합니다.

5.10.1. 개요

스포츠 토토 베트맨은 논리적으로 하나의 큰 테이블을 작은 물리적 조각으로 분할하는 것을 말합니다. 분할은 몇 가지 이점을 제공 할 수 있습니다.

  • 특정 상황에서, 특히 테이블의 대부분이 단일 스포츠 토토 베트맨 또는 소수의 스포츠 토토 베트맨에있을 때 특정 상황에서 쿼리 성능을 크게 향상시킬 수 있습니다. 분할은 인덱스의 선행 열을 대체하여 인덱스 크기를 줄이고 인덱스의 많은 부분이 메모리에 적합 할 가능성이 높아집니다.

  • 쿼리 또는 업데이트가 단일 스포츠 토토 베트맨의 많은 비율에 액세스하면 전체 테이블에 흩어져있는 인덱스 및 랜덤 액세스 판독 값을 사용하는 대신 해당 스포츠 토토 베트맨의 순차적 스캔을 활용하여 성능을 향상시킬 수 있습니다.

  • 스포츠 토토 베트맨 설계에 해당 요구 사항이 계획된 경우 스포츠 토토 베트맨을 추가하거나 제거하여 벌크 하중 및 삭제를 수행 할 수 있습니다. 행위Alter Table Detach Partition또는 사용을 사용하여 개별 스포츠 토토 베트맨 삭제드롭 테이블는 대량 작동보다 훨씬 빠릅니다. 이 명령은 또한 전적으로를 피합니다.진공벌크로 인한 오버 헤드삭제.

  • 거의 사용하지 않는 데이터를 저렴하고 느린 스토리지 미디어로 마이그레이션 할 수 있습니다.

혜택은 일반적으로 테이블이 매우 큰 경우에만 가치가 있습니다. 테이블의 크기가 데이터베이스 서버의 물리적 메모리를 초과해야한다는 것입니다.

PostgreSQL다음 형식의 파티셔닝에 대한 내장 지원을 제공합니다.

범위 파티셔닝

테이블이 분할되어범위다른 스포츠 토토 베트맨에 할당 된 값의 범위간에 겹치지 않고 키 열 또는 열 세트로 정의됩니다. 예를 들어, 날짜 범위 또는 특정 비즈니스 오브젝트에 대한 식별자 범위에 의해 분할 될 수 있습니다.

파티셔닝 목록

테이블은 각 스포츠 토토 베트맨에 어떤 주요 값이 나타나는지 명시 적으로 나열하여 분할됩니다.

응용 프로그램이 위에 나열되지 않은 다른 형태의 파티셔닝을 사용해야하는 경우 상속 및와 같은 대체 방법.Union All대신보기를 사용할 수 있습니다. 이러한 방법은 유연성을 제공하지만 내장 선언 파티셔닝의 성능 이점은 없습니다.

5.10.2. 선언적 분할

PostgreSQL스포츠 토토 베트맨이라는 조각으로 테이블을 나누는 방법을 지정하는 방법을 제공합니다. 나뉘어 진 테이블을라고합니다.스포츠 토토 베트맨 테이블. 사양은로 구성됩니다.스포츠 토토 베트맨 방법스포츠 토토 베트맨 키.

스포츠 토토 베트맨 된 테이블에 삽입 된 모든 행이 중 하나로 라우팅됩니다.스포츠 토토 베트맨스포츠 토토 베트맨 키의 값에 따라. 각 스포츠 토토 베트맨에는 그 데이터의 하위 집합이 있습니다.스포츠 토토 베트맨 경계. 현재 지원되는 스포츠 토토 베트맨 방법에는 범위 및 목록이 포함됩니다. 각 스포츠 토토 베트맨에는 각각 다양한 키와 키 목록이 할당됩니다.

스포츠 토토 베트맨 자체는 자체적으로 스포츠 토토 베트맨 된 테이블로 정의 될 수 있습니다.하위 분수. 스포츠 토토 베트맨에는 자체 인덱스, 제약 및 기본값이 다른 스포츠 토토 베트맨과는 다를 수 있습니다.테이블 생성스포츠 토토 베트맨 된 테이블 및 스포츠 토토 베트맨 작성에 대한 자세한 내용은

일반 테이블을 스포츠 토토 베트맨 된 테이블로 전환하거나 그 반대도 마찬가지입니다. 그러나 스포츠 토토 베트맨 된 테이블의 스포츠 토토 베트맨으로 데이터가 포함 된 정규 또는 스포츠 토토 베트맨 된 테이블을 추가하거나 스포츠 토토 베트맨 된 테이블에서 스포츠 토토 베트맨을 독립형 테이블로 전환 할 수 있습니다.Alter Table에 대해 자세히 알아 보려면첨부 스포츠 토토 베트맨and스포츠 토토 베트맨하위 명령.

개별 스포츠 토토 베트맨은 상속 부위 비하인드와 함께 분할 된 테이블에 연결됩니다. 그러나 이전 섹션에서 논의 된 일부 상속 기능을 분할 된 테이블 및 스포츠 토토 베트맨과 함께 사용할 수 없습니다.Tableoid및 모든 정상적인 상속 규칙은에 적용됩니다섹션 5.9몇 가지 예외가있는 경우 :

  • 둘 다checkandNOT NULL분할 된 테이블의 제약은 항상 모든 스포츠 토토 베트맨에 의해 상속됩니다.check표시된 제약 조건상속 없음분할 된 테이블에서 만들 수 없습니다.

  • 사용전용스포츠 토토 베트맨이 없을 때 분할 된 테이블에만 제약 조건을 추가하거나 삭제하려면 지원됩니다. 스포츠 토토 베트맨이 존재하면 사용전용스포츠 토토 베트맨이있을 때 분할 된 테이블에만 제약 조건을 추가하거나 삭제하는 오류가 발생합니다. 대신, 제약 조건은 부모 테이블에 없을 때 스포츠 토토 베트맨에 직접 존재하지 않을 수 있습니다.Truncate 전용분할 된 테이블에서 항상 오류를 반환합니다.

  • 스포츠 토토 베트맨에는 부모에 존재하지 않는 열을 가질 수 없습니다. 로 스포츠 토토 베트맨을 만들 때 열을 지정하는 것은 불가능합니다테이블 생성Alter Table. 테이블은와 스포츠 토토 베트맨으로 추가 될 수 있습니다.Alter Table ... 스포츠 토토 베트맨 첨부열이 부모와 정확히 일치하는 경우에만OID열.

  • 당신은를 떨어 뜨릴 수 없습니다NOT NULL부모 테이블에 제약 조건이있는 경우 스포츠 토토 베트맨 열의 제약 조건.

스포츠 토토 베트맨은 외국 테이블 일 수도 있습니다 (참조외국 테이블 만들기), 이들은 일반 테이블이없는 몇 가지 제한 사항이 있지만. 예를 들어, 분할 된 테이블에 삽입 된 데이터는 외국 테이블 스포츠 토토 베트맨으로 라우팅되지 않습니다.

5.10.2.1. 예

우리가 대형 아이스크림 회사의 데이터베이스를 구성한다고 가정 해 봅시다. 이 회사는 매일 최대 온도를 측정하고 각 지역의 아이스크림 판매를 측정합니다.

테이블 측정 생성 (    city_id int null not,

우리는 대부분의 쿼리가 지난 주, 월 또는 분기의 데이터에만 액세스 할 것임을 알고 있습니다.이 테이블의 주요 사용은 관리를위한 온라인 보고서를 준비하는 것이기 때문입니다. 저장 해야하는 이전 데이터의 양을 줄이기 위해 가장 최근 3 년간의 데이터 만 유지하기로 결정했습니다.

이 경우 선언 파티셔닝을 사용하려면 다음 단계를 사용하십시오.

  1. 생성측정테이블을 지정하여 스포츠 토토 베트맨 된 테이블로 테이블스포츠 토토 베트맨 by절단 방법 (를 포함하는 조항범위이 경우) 및 스포츠 토토 베트맨 키로 사용할 열 목록.

    테이블 측정 생성 (    city_id int null not,

    원하는 경우 스포츠 토토 베트맨 키에서 여러 열을 사용하기로 결정할 수 있습니다. 물론 이것은 종종 더 많은 수의 스포츠 토토 베트맨을 초래할 것이며, 각각은 개별적으로 더 작습니다.마지막 이름andFirstName(순서대로) 스포츠 토토 베트맨 키로.

  2. 스포츠 토토 베트맨 생성. 각 스포츠 토토 베트맨의 정의는 부모의 분할 방법 및 스포츠 토토 베트맨 키에 해당하는 경계를 지정해야합니다.

    이렇게 만든 스포츠 토토 베트맨은 모든면에서 정상입니다PostgreSQL테이블 (또는 아마도 외국 테이블). 각 스포츠 토토 베트맨에 대한 테이블 스페이스 및 스토리지 매개 변수를 별도로 지정할 수 있습니다.

    스포츠 토토 베트맨에 대한 스포츠 토토 베트맨 경계 조건을 설명하는 테이블 제약 조건을 만들 필요는 없습니다. 대신, 스포츠 토토 베트맨 제약 조건은 스포츠 토토 베트맨 바운드 사양에서 암시 적으로 생성됩니다.

    테이블 측정 생성 _y2006M02 측정의 스포츠 토토 베트맨    ( '2006-02-01')에서 ( '2006-03-01')의 값;

    하위 분수를 구현하려면 지정하십시오.스포츠 토토 베트맨 by개별 스포츠 토토 베트맨을 생성하는 데 사용되는 명령의 조항 :

    테이블 측정 생성 _y2006m02 측정의 스포츠 토토 베트맨    ( '2006-02-01')에서 ( '2006-03-01')의 값

    스포츠 토토 베트맨을 작성한 후측정 _y2006m02에 삽입 된 모든 데이터측정​​그에 매핑되었습니다측정 _y2006m02(또는 직접 삽입되는 데이터측정 _y2006m02, 스포츠 토토 베트맨 제약 조건을 만족시키는 경우)에 따라 스포츠 토토 베트맨 중 하나로 더 리디렉션됩니다.PeakTemp열. 지정된 스포츠 토토 베트맨 키는 부모의 스포츠 토토 베트맨 키와 겹칠 수 있지만, 그분이 수용하는 데이터 세트가 스포츠 토토 베트맨 자체의 한계가 허용하는 내용의 하위 집합을 구성 할 수 있도록 하위 스포츠 토토 베트맨의 한계를 지정할 때주의를 기울여야합니다.

  3. 모든 스포츠 토토 베트맨에 대해 원하는 다른 인덱스뿐만 아니라 키 열에서 인덱스를 만듭니다. (주요 인덱스는 엄격하게 필요하지 않지만 대부분의 시나리오에서는 도움이됩니다. 핵심 값이 고유 한 경우 항상 각 스포츠 토토 베트맨에 대해 고유하거나 1 차 키 제약 조건을 생성해야합니다.).

    측정 _y2006m02에서 색인 생성 (logdate);측정 _y2006m03 (logdate)에서 색인 생성;
  4. 제약 _exclusion구성 매개 변수가 비활성화되지 않았습니다on. 그렇다면 쿼리는 원하는대로 최적화되지 않습니다.

위의 예에서는 매달 새 스포츠 토토 베트맨을 만들 것이므로 필요한 DDL을 자동으로 생성하는 스크립트를 작성하는 것이 현명 할 수 있습니다..

5.10.2.2. 스포츠 토토 베트맨 유지 보수

일반적으로 테이블을 처음 정의 할 때 설정된 스포츠 토토 베트맨 세트는 정적을 유지하기위한 것이 아닙니다. 오래된 데이터를 제거하고 새로운 데이터에 대한 새로운 스포츠 토토 베트맨을 주기적으로 추가하는 것이 일반적입니다.

오래된 데이터를 제거하기위한 가장 간단한 옵션은 더 이상 필요하지 않은 스포츠 토토 베트맨을 삭제하는 것입니다.

드롭 테이블 측정 _y2006m02;

이것은 모든 레코드를 개별적으로 삭제할 필요가 없기 때문에 수백만 레코드를 매우 빠르게 삭제할 수 있습니다. 그러나 위의 명령은액세스 독점부모 테이블의 잠그십시오.

종종 바람직한 또 다른 옵션은 스포츠 토토 베트맨 된 테이블에서 스포츠 토토 베트맨을 제거하지만 자체 오른쪽의 테이블로 액세스 할 수있는 것입니다.

ALTER 테이블 측정 분리 스포츠 토토 베트맨 측정 _Y2006M02;

이를 통해 데이터가 삭제되기 전에 추가 작업을 수행 할 수 있습니다. 예를 들어, 이것은 종종를 사용하여 데이터를 백업하는 데 유용한 시간입니다.COPY, pg_dump또는 유사한 도구. 또한 데이터를 더 작은 형식으로 집계하거나 다른 데이터 조작을 수행하거나 보고서를 실행하는 데 유용한 시간 일 수도 있습니다.

마찬가지로 새로운 데이터를 처리하기 위해 새 스포츠 토토 베트맨을 추가 할 수 있습니다. 위에 원래 스포츠 토토 베트맨이 생성 된 것처럼 스포츠 토토 베트맨 된 테이블에서 빈 스포츠 토토 베트맨을 만들 수 있습니다.

테이블 측정 생성 _y2008m02 측정 분할    ( '2008-02-01')에서 ( '2008-03-01')의 값

대안으로서, 스포츠 토토 베트맨 구조 외부에 새 테이블을 만들고 나중에 적절한 스포츠 토토 베트맨으로 만드는 것이 더 편리합니다. 이를 통해 스포츠 토토 베트맨 된 테이블에 표시되기 전에 데이터를로드, 점검 및 변환 할 수 있습니다.

테이블 측정 생성 _y2008m02  (제약 조건을 포함한 기본값을 포함한 측정과 같은)

실행하기 전첨부 스포츠 토토 베트맨명령, a를 작성하는 것이 좋습니다check원하는 스포츠 토토 베트맨 제약 조건과 일치하는 테이블의 제약 조건. 이렇게하면 시스템이 스캔을 건너 뛰면 암시 적 스포츠 토토 베트맨 제약 조건을 검증 할 수 있습니다.check제약 조건, 테이블이 스캔되어 스포츠 토토 베트맨 제약 조건을 검증하는 동안액세스 독점부모 테이블을 잠그십시오. 중복을 떨어 뜨리는 것이 바람직 할 수 있습니다check이후의 제약 조건첨부 스포츠 토토 베트맨완료되었습니다.

5.10.2.3. 제한

다음 한계는 분할 된 테이블에 적용됩니다 :

  • 모든 스포츠 토토 베트맨에서 일치하는 인덱스를 자동으로 만들 수있는 시설이 없습니다. 별도의 명령으로 각 스포츠 토토 베트맨에 인덱스를 추가해야합니다.

  • 기본 키는 분할 된 테이블에서 지원되지 않기 때문에, 칸막이 된 테이블을 참조하는 외래 키는 지원되지 않으며, 칸막이 테이블에서 다른 테이블로 외국 키 참조가 없습니다..

  • 사용충돌분할 된 테이블이있는 절은 개별 스포츠 토토 베트맨에서만 고유 또는 제외 제약 조건을 생성 할 수 있기 때문에 오류가 발생합니다. 전체 분할 계층에 걸쳐 독창성 (또는 배제 제약)을 시행하는 것에 대한 지원은 없습니다.

  • an업데이트행의 새로운 값이 원래 스포츠 토토 베트맨의 암시 적 스포츠 토토 베트맨 제약 조건을 충족시키지 못하기 때문에 행이 한 스포츠 토토 베트맨에서 다른 스포츠 토토 베트맨으로 이동하게됩니다..

  • 필요한 경우 행 트리거 트리거를 분할 된 테이블이 아닌 개별 스포츠 토토 베트맨에 정의해야합니다.

  • 동일한 스포츠 토토 베트맨 트리에서 임시 및 영구 관계를 믹싱하는 것은 허용되지 않습니다. 따라서 분할 된 테이블이 영구적 인 경우, 스포츠 토토 베트맨이어야하며 마찬가지로 분할 된 테이블이 임시 인 경우 마찬가지로.

5.10.3. 상속을 사용한 구현

내장 선언 파티셔닝은 대부분의 일반적인 사용 사례에 적합하지만보다 유연한 접근 방식이 유용한 상황이 있습니다. 파티셔닝은 테이블 상속을 사용하여 구현할 수 있으며, 다음과 같은 선언 파티셔닝으로 지원되지 않는 여러 기능을 허용합니다.

  • 파티셔닝은 모든 스포츠 토토 베트맨이 부모와 정확히 동일한 열 세트를 가져야한다는 규칙을 시행하지만 테이블 상속은 어린이가 부모에게 추가 열이 없을 수 있습니다.

  • 테이블 상속은 여러 상속을 허용합니다.

  • 선언 파티셔닝은 목록 및 범위 분할 만 지원하는 반면, 테이블 상속은 사용자가 선택한 방식으로 데이터를 나눌 수 있도록합니다. (그러나 제약 제외가 스포츠 토토 베트맨을 효과적으로 잘라 낼 수없는 경우 쿼리 성능이 매우 열악합니다.)

  • 일부 작업은 선 상속을 사용할 때보 다 선언적 파티셔닝을 사용할 때 더 강력한 잠금이 필요합니다. 예를 들어, 스포츠 토토 베트맨 테이블에 또는 스포츠 토토 베트맨을 추가하거나 제거하려면이 필요합니다.액세스 독점부모 테이블을 잠그는 동안 A공유 업데이트 독점정기적 인 상속의 경우 잠금 장치가 충분합니다.

5.10.3.1. 예

우리는 비수분하지 않은 것을 사용합니다측정위의 표. 상속을 사용하여 분할을 구현하려면 다음 단계를 사용하십시오.

  1. 생성마스터모든 스포츠 토토 베트맨이 상속 될 테이블. 이 테이블에는 데이터가 포함되지 않습니다.측정원래 정의 된대로 테이블.

  2. 몇 가지 생성Child각각 마스터 테이블에서 상속되는 테이블. 일반적 으로이 테이블은 마스터에서 상속 된 세트에 열을 추가하지 않습니다.PostgreSQL테이블 (또는 외국 테이블).

    테이블 측정 생성 _y2006m02 () 상속 (측정);테이블 측정 _y2006m03 () 상속 (측정)을 작성합니다.
  3. 각 스포츠 토토 베트맨에서 허용 된 키 값을 정의하기 위해 스포츠 토토 베트맨 테이블에 겹치지 않는 테이블 제약 조건을 추가합니다.

    일반적인 예는 다음과 같습니다.

    check (x = 1)Check (County in County ( 'Oxfordshire', 'Buckinghamshire', 'Warwickshire'))))

    제약 조건이 다른 스포츠 토토 베트맨에서 허용되는 키 값 사이에 중첩이 없음을 보장합니다. 일반적인 실수는 다음과 같은 범위 제약 조건을 설정하는 것입니다.

    점검 (100에서 200 사이의 outletid)확인 (200에서 300 사이의 outletid)

    이것은 어떤 스포츠 토토 베트맨의 키 값 200이 속한 지 명확하지 않기 때문에 잘못되었습니다.

    다음과 같이 스포츠 토토 베트맨을 만드는 것이 좋습니다 :

    테이블 생성 _y2006m02 (    check (logdate = date '2006-02-01'및 logdate <날짜 '2006-03-01')
  4. 각 스포츠 토토 베트맨의 경우 키 열의 인덱스를 작성하고 원하는 다른 색인을 작성하십시오.

    Measurement_Y2006M02 (logdate)에서 인덱스 측정 _y2006m02_Logdate 만들기;Measurement_Y2006M03 (logdate)에서 인덱스 측정 _y2006M03_LOGDATE를 만듭니다.
  5. 우리는 응용 프로그램을 말할 수 있기를 원합니다측정에 삽입 ...그리고 데이터를 적절한 스포츠 토토 베트맨 테이블로 리디렉션하도록합니다. 적절한 트리거 함수를 마스터 테이블에 첨부하여이를 배열 할 수 있습니다.

    함수 생성 또는 교체 측정 _insert_trigger ()트리거를 $$로 반환합니다

    함수를 작성한 후 트리거 함수를 호출하는 트리거를 만듭니다.

    Trigger insert_measurement_trigger 작성    측정에 삽입하기 전에

    매달 트리거 함수를 재정의하여 항상 현재 스포츠 토토 베트맨을 가리킬 수 있도록해야합니다. 그러나 트리거 정의를 업데이트 할 필요는 없습니다.

    데이터를 삽입하고 서버가 행을 추가 해야하는 스포츠 토토 베트맨을 자동으로 찾을 수 있습니다. 예를 들어보다 복잡한 트리거 기능 으로이 작업을 수행 할 수 있습니다.

    함수 생성 또는 교체 측정 _insert_trigger ()트리거를 $$로 반환합니다

    트리거 정의는 이전과 동일합니다. 각각if테스트는 정확히 일치해야합니다check스포츠 토토 베트맨에 대한 제약 조건.

    이 기능은 단일 월 경우보다 더 복잡하지만 분기가 필요하기 전에 추가 할 수 있기 때문에 자주 업데이트 할 필요는 없습니다..

    Note

    실제로 대부분의 인서트가 해당 스포츠 토토 베트맨에 들어가면 최신 스포츠 토토 베트맨을 먼저 확인하는 것이 가장 좋습니다. 단순화를 위해이 예제의 다른 부분에서 트리거 테스트를 동일한 순서로 보여주었습니다.

    적절한 스포츠 토토 베트맨 테이블로 인서트를 리디렉션하는 다른 접근 방식은 마스터 테이블에서 트리거 대신 규칙을 설정하는 것입니다. 예를 들어:

    규칙 생성 _insert_y2006m02 AS측정 값으로 삽입하십시오

    규칙은 트리거보다 오버 헤드가 훨씬 많지만 오버 헤드는 행당 한 번보다 쿼리 당 한 번 지불 되므로이 방법은 벌크 삽입 상황에 유리할 수 있습니다. 그러나 대부분의 경우 트리거 방법은 더 나은 성능을 제공합니다.

    COPY규칙을 무시합니다. 사용하고 싶다면COPY데이터를 삽입하려면 마스터가 아닌 올바른 스포츠 토토 베트맨 테이블에 복사해야합니다.COPY화재 트리거를 사용하므로 트리거 접근법을 사용하면 정상적으로 사용할 수 있습니다.

    규칙 접근법의 또 다른 단점은 규칙 세트가 삽입 날짜를 다루지 않으면 오류를 강제하는 간단한 방법이 없다는 것입니다. 데이터는 대신 마스터 테이블로 조용히 들어갑니다.

  6. 제약 _exclusion구성 매개 변수가 비활성화되지 않았습니다on. 그렇다면 쿼리는 원하는대로 최적화되지 않습니다.

우리가 볼 수 있듯이 복잡한 분할 체계에는 상당한 양의 DDL이 필요할 수 있습니다. 위의 예에서는 매달 새 스포츠 토토 베트맨을 만들 것이므로 필요한 DDL을 자동으로 생성하는 스크립트를 작성하는 것이 좋습니다.

5.10.3.2. 스포츠 토토 베트맨 유지 보수

이전 데이터를 빨리 제거하려면 더 이상 필요하지 않은 스포츠 토토 베트맨을 삭제하십시오.

드롭 테이블 측정 _y2006m02;

분할 된 테이블에서 스포츠 토토 베트맨을 제거하지만 자체 오른쪽의 테이블로 액세스 할 수 있습니다.

ALTER 테이블 측정 _Y2006M02 상속 측정 없음;

새 데이터를 처리하기 위해 새 스포츠 토토 베트맨을 추가하려면 위에서 원래 스포츠 토토 베트맨이 생성 된 것처럼 빈 스포츠 토토 베트맨을 만듭니다.

테이블 측정 생성 _y2008m02 (    check (logdate = date '2008-02-01'및 logdate <날짜 '2008-03-01'))

또는 또는 스포츠 토토 베트맨 구조 외부에 새 테이블을 만들고 데이터를로드, 확인 및 변환 한 후 스포츠 토토 베트맨으로 만들 수 있습니다..

테이블 측정 생성 _y2008m02  (제약 조건을 포함한 기본값을 포함한 측정과 같은);

5.10.3.3. 경고

다음 경고는 상속을 사용하여 구현 된 분할 된 테이블에 적용됩니다.

  • 모든 것을 확인하는 자동 방법은 없습니다check제약은 상호 배타적입니다. 스포츠 토토 베트맨을 생성하고 각각을 손으로 쓰는 것보다 관련 객체를 생성 및/또는 수정하는 코드를 만드는 것이 더 안전합니다.

  • 여기에 표시된 체계는 행의 스포츠 토토 베트맨 키 열이 결코 변경되지 않거나 최소한 다른 스포츠 토토 베트맨으로 이동하도록 요구할 정도로 충분히 변경되지 않는다고 가정합니다.업데이트그 일을 시도하는 것은 때문에 실패 할 것입니다.check제약. 이러한 사례를 처리 해야하는 경우 스포츠 토토 베트맨 테이블에 적절한 업데이트 트리거를 넣을 수 있지만 구조 관리가 훨씬 더 복잡해집니다..

  • 매뉴얼을 사용하는 경우진공또는Analyze명령, 각 스포츠 토토 베트맨에서 개별적으로 실행해야한다는 것을 잊지 마십시오. 명령 :

    측정 분석;

    마스터 테이블 만 처리합니다.

  • 삽입진술충돌조항은 예상대로 작동하지 않을 것입니다.충돌행동은 아동 관계가 아니라 지정된 대상 관계에 대한 고유 한 위반의 경우에만 취해집니다.

  • 응용 프로그램이 분할 구성표를 명시 적으로 인식하지 않는 한, 원하는 스포츠 토토 베트맨으로 행을 라우팅하기 위해 트리거 또는 규칙이 필요합니다. 트리거는 쓰기가 복잡 할 수 있으며 선언적 파티셔닝을 통해 내부적으로 수행 된 튜플 라우팅보다 훨씬 느리게됩니다.

5.10.4. 분할 및 제약 제외

제약 제외는 위에서 설명한 방식으로 정의 된 스포츠 토토 베트맨 된 테이블의 성능을 향상시키는 쿼리 최적화 기술입니다 (선언적으로 분할 된 테이블과 상속을 사용하여 구현 된 것). 예를 들어 :

SET SORMSARTAINT_EXCLUSION = ON;Logdate = Date '2008-01-01'; 측정에서 count (*)를 선택하십시오.

제약 제외없이 위의 쿼리는의 각 스포츠 토토 베트맨을 스캔합니다.측정테이블. 제약 제외가 활성화되면 플래너는 각 스포츠 토토 베트맨의 제약 조건을 검사하고 쿼리를 충족하는 행을 포함 할 수 없기 때문에 스포츠 토토 베트맨을 스캔 할 필요가 없음을 증명하려고합니다.여기서절. 플래너가 이것을 증명할 수 있으면 쿼리 계획에서 스포츠 토토 베트맨을 제외합니다.

당신은를 사용할 수 있습니다설명계획의 차이를 보여주는 명령제약 _exclusionon 및 계획. 이 유형의 테이블 설정에 대한 일반적인 최적화 된 계획은 다음과 같습니다.

SET SUNSTAINT_EXCLUSION = OFF;로그 데이트 = 날짜 '2008-01-01'에서 측정에서 선택한 수 (*)를 설명하십시오.

스포츠 토토 베트맨 중 일부 또는 전부는 전체 테이블 순차 스캔 대신 인덱스 스캔을 사용할 수 있지만 여기서는이 쿼리에 응답하기 위해 이전 스포츠 토토 베트맨을 전혀 스캔 할 필요가 없다는 것입니다. 제약 제외를 활성화하면 동일한 답변을 전달할 상당히 저렴한 계획을 얻습니다.

SET SORMSARTAINT_EXCLUSION = ON;로그 데이트 = 날짜 '2008-01-01'에서 측정에서 선택한 수 (*)를 설명하십시오.

제약 제외는에 의해서만 구동됩니다.check인덱스의 존재에 의한 것이 아니라 제약. 따라서 키 열의 인덱스를 정의 할 필요는 없습니다.

기본 (및 권장) 설정제약 _exclusion실제로는 아닙니다onNOROFF, 그러나 중간 설정은스포츠 토토 베트맨,이 기술은 분할 된 테이블에서 작동 할 수있는 쿼리에만 적용됩니다. 그만큼on설정 설정 플래너가 검사하게됩니다check모든 쿼리의 제약 조건, 혜택이없는 간단한 쿼리조차도

다음 경고는 제약 제외에 적용되며, 상속 및 분할 된 테이블 모두에서 사용됩니다 :

  • 제약 제외는 쿼리의 경우에만 작동합니다여기서절은 상수 (또는 외부로 제공된 매개 변수)를 포함합니다. 예를 들어,와 같은 상상할 수없는 함수에 대한 비교current_timestamp플래너가 런타임에 기능 값이 어떤 스포츠 토토 베트맨에 빠질 수 있는지 알 수 없으므로 최적화 할 수 없습니다.

  • 분할 제약 조건을 간단하게 유지하십시오. 그렇지 않으면 플래너가 스포츠 토토 베트맨을 방문 할 필요가 없음을 증명하지 못할 수도 있습니다. 목록 분할에 간단한 평등 조건을 사용하거나 앞의 예제와 같이 범위 분할을위한 간단한 범위 테스트를 사용하십시오.

  • 마스터 테이블의 모든 스포츠 토토 베트맨에 대한 모든 제약은 제약 제외 중에 검사되므로 많은 수의 스포츠 토토 베트맨이 쿼리 계획 시간을 상당히 증가시킬 수 있습니다. 이러한 기술을 사용하는 분할은 아마도 백 스포츠 토토 베트맨까지 잘 작동합니다.

5.10.5. 선언적 파티셔닝 모범 사례

쿼리 계획 및 실행의 성능이 열악한 설계에 의해 부정적인 영향을받을 수 있으므로 테이블을 분할하는 방법의 선택은 신중하게 만들어야합니다..

가장 중요한 설계 결정 중 하나는 데이터를 분할하는 열 또는 열입니다. 종종 최선의 선택은 가장 일반적으로 나타나는 열이나 열 세트로 분할하는 것입니다.여기서분할 된 테이블에서 실행되는 쿼리의 조항.여기서스포츠 토토 베트맨 키와 일치하고 호환되는 조항 항목을 사용하여 불필요한 스포츠 토토 베트맨을 정리할 수 있습니다. 원치 않는 데이터를 제거하는 것도 스포츠 토토 베트맨 전략을 계획 할 때 고려해야 할 요소입니다.

테이블을 나누어야 할 대상 스포츠 토토 베트맨 수를 선택하는 것도 중요한 결정입니다. 분할이 충분하지 않으면 인덱스가 너무 커지고 데이터 로컬 성이 나빠져 캐시 적중률이 낮아질 수 있습니다.범위List그리고 고객의 수가 데이터를 분할하는 것이 실용적인 것 이상으로 증가하지 않기를 희망합니다.

하위 파티셔닝은 다른 스포츠 토토 베트맨보다 커질 것으로 예상되는 스포츠 토토 베트맨을 더 나누는 데 유용 할 수 있지만, 과도한 하위 스포츠 토토 베트맨은 쉽게 많은 수의 스포츠 토토 베트맨으로 이어질 수 있으며 이전 단락에서 언급 된 것과 동일한 문제를 일으킬 수 있습니다..

쿼리 계획 및 실행 중에 분할의 오버 헤드를 고려하는 것도 중요합니다. 쿼리 플래너는 일반적으로 최대 수백 개의 스포츠 토토 베트맨으로 스포츠 토토 베트맨 계층을 처리 할 수 ​​있습니다.업데이트and삭제명령. 많은 스포츠 토토 베트맨을 갖는 것에 대해 우려하는 또 다른 이유는 서버의 메모리 소비가 일정 기간 동안, 특히 많은 세션이 다수의 스포츠 토토 베트맨에 닿는 경우 크게 증가 할 수 있기 때문입니다.

데이터웨어 하우스 유형 워크로드를 사용하면보다 더 많은 스포츠 토토 베트맨을 사용하는 것이 합리적 일 수 있습니다OLTP워크로드를 입력하십시오. 일반적으로 데이터웨어 하우스에서 쿼리 계획 시간은 쿼리 실행 중에 대부분의 처리 시간이 소비되므로 쿼리 계획 시간은 문제가되지 않습니다.