이 문서는 지원되지 않는 PostgreSQL 버전에 대한 것입니다.
당신은 다음과 같은 페이지를 보고 싶을 수도 있습니다.메이저 토토 사이트 PostgreSQL : 문서 : 17 : 5.12. 테이블 파티셔닝버전 또는 위에 나열된 다른 지원 버전 중 하나를 사용하세요.

5.9. 파티셔닝

포스트그레SQL기본 지원 테이블 파티셔닝. 이 섹션에서는 이유와 방법을 설명합니다. 데이터베이스 설계의 일부로 분할을 구현합니다.

5.9.1. 개요

분할이란 논리적으로 하나의 큰 것을 분할하는 것을 의미합니다. 테이블을 더 작은 물리적 조각으로 나눕니다. 파티셔닝은 다음을 제공할 수 있습니다. 여러 가지 이점:

  • 쿼리 성능은 다음에서 크게 향상될 수 있습니다. 특정 상황, 특히 대부분의 경우 테이블의 액세스된 행이 단일 파티션에 있거나 파티션 수가 적습니다. 파티셔닝 대체물 인덱스의 선행 열에 대해 인덱스 크기를 줄이고 많이 사용되는 부분이 인덱스는 메모리에 맞습니다.

  • 쿼리 또는 업데이트가 많은 부분에 액세스할 때 단일 파티션을 사용하면 성능이 향상될 수 있습니다. 대신 해당 파티션의 순차적 스캔 이점 인덱스와 분산된 랜덤 액세스 읽기를 사용하여 토토 사이트 추천 전체.

  • 대량 로드 및 삭제는 다음을 추가하여 수행할 수 있습니다. 해당 요구 사항이 계획된 경우 파티션 제거 파티션 디자인.토토 사이트 추천 번호 변경 상속그리고드롭 토토 사이트 추천있습니다 둘 다 대량 작업보다 훨씬 빠릅니다. 이 명령들도 완전히 피하십시오진공오버헤드 대량으로 인해 발생함삭제.

  • 자주 사용하지 않는 데이터를 더 저렴하고 느린 데이터로 마이그레이션할 수 있습니다. 저장 매체.

이 혜택은 일반적으로 토토 사이트 추천이 있을 때만 가치가 있습니다. 그렇지 않으면 매우 클 것입니다. 토토 사이트 추천이 있는 정확한 지점 애플리케이션에 따라 파티셔닝의 이점을 누릴 수 있습니다. 경험상 토토 사이트 추천의 크기는 데이터베이스 서버의 물리적 메모리를 초과합니다.

현재,PostgreSQL테이블 상속을 통한 파티셔닝을 지원합니다. 각 파티션 단일 상위 테이블의 하위 테이블로 생성되어야 합니다. 는 상위 테이블 자체는 일반적으로 비어 있습니다. 그것은 단지 존재한다 전체 데이터 세트를 나타냅니다. 당신은 익숙해야합니다 상속(참조스포츠 토토 결과 : 문서 : 9.0 : 상속) 파티션 설정을 시도하기 전에.

다음 형태의 파티셔닝을 구현할 수 있습니다.포스트그레SQL:

범위 분할

테이블은 다음과 같이 분할되어 있습니다."범위"키 열 또는 집합으로 정의됨 값 범위 간에 겹치지 않는 열 다른 파티션에 할당됩니다. 예를 들어 날짜 범위 또는 식별자 범위별로 분할 특정 비즈니스 개체.

목록 분할

테이블은 다음을 명시적으로 나열하여 분할되었습니다. 키 값은 각 파티션에 나타납니다.

5.9.2. 구현 파티셔닝

분할된 테이블을 설정하려면 다음을 수행하십시오:

  1. 생성"마스터"토토 사이트 추천, 모든 파티션이 상속됩니다.

    이 토토 사이트 추천에는 데이터가 포함되지 않습니다. 검사를 정의하지 마세요. 당신이 의도하지 않는 이상 이 토토 사이트 추천에 대한 제약 조건이 적용됩니다. 모든 파티션에 동일하게 적용됩니다. 아무 의미가 없습니다 이에 대한 인덱스 또는 고유 제약 조건을 정의하고, 어느 쪽이든.

  2. 여러 개 생성"아이"토토 사이트 추천 각각은 마스터 토토 사이트 추천에서 상속됩니다. 일반적으로 이러한 토토 사이트 추천은 상속된 집합에 어떤 열도 추가하지 않습니다. 주인님.

    우리는 하위 토토 사이트 추천을 파티션으로 참조할 것입니다. 그들은 모든 면에서 정상입니다PostgreSQL토토 사이트 추천.

  3. 정의할 파티션 토토 사이트 추천에 토토 사이트 추천 제약조건을 추가하세요. 각 파티션에 허용되는 키 값입니다.

    전형적인 예는 다음과 같습니다:

    확인( x = 1 )
    CHECK( 카운티 IN( '옥스퍼드셔', '버킹엄셔', '워릭셔' ))
    확인( 콘센트 ID = 100 AND 콘센트 ID < 200 )

    제약조건이 다음이 없음을 보장하는지 확인하세요. 서로 다른 키 값 사이의 중복이 허용됩니다. 파티션. 흔히 저지르는 실수는 범위 제한을 설정하는 것입니다. 좋아요:

    확인(점포 ID 100~200 토토 사이트 추천)
    확인(200~300 토토 사이트 추천의 콘센트 ID)

    어느 파티션이 확실하지 않기 때문에 이는 잘못된 것입니다. 키 값 200이 속해 있습니다.

    범위 간 구문에는 차이가 없습니다. 그리고 목록 분할; 그 용어는 설명적이다 만.

  4. 각 파티션에 대해 키에 인덱스를 생성하십시오 열뿐만 아니라 원하는 기타 인덱스도 포함됩니다. (키 인덱스는 꼭 필요한 것은 아니지만 대부분의 경우 시나리오가 도움이 됩니다. 핵심 가치를 다음과 같이 설정하려는 경우 고유한 경우 항상 고유한 또는 각 파티션에 대한 기본 키 제약 조건입니다.)

  5. 선택적으로 데이터를 리디렉션하는 트리거 또는 규칙 정의 마스터 토토 사이트 추천에 적절한 위치에 삽입됨 파티션.

  6. 다음을 확인하세요.constraint_exclusion구성 매개변수는 다음에서 비활성화되지 않았습니다.postgresql.conf. 그렇다면 쿼리는 수행되지 않습니다. 원하는 대로 최적화하세요.

예를 들어, 우리가 다음을 위한 데이터베이스를 구축한다고 가정해 보겠습니다. 대형 아이스크림 회사. 회사는 최고 기온을 측정합니다. 매일매일, 지역별 아이스크림 판매도 함께 진행됩니다. 개념적으로 우리는 다음과 같은 테이블을 원합니다.

테이블 측정 생성(
    city_id int는 null이 아닙니다.
    logdate 날짜가 null이 아닙니다.
    피크 온도 정수,
    단위 판매 정수
);

우리는 대부분의 쿼리가 지난 주에만 액세스한다는 것을 알고 있습니다. 이 테이블의 주요 사용 이후 월별 또는 분기별 데이터 관리를 위한 온라인 보고서를 준비하는 것입니다. 줄이기 위해 저장해야 하는 오래된 데이터의 양에 따라 최근 3년간의 데이터를 보관합니다. 시작 부분에 매달 가장 오래된 달의 데이터가 삭제됩니다.

이 상황에서 우리는 파티셔닝을 사용하여 다음을 충족할 수 있습니다. 측정 테이블에 대한 우리의 다양한 요구 사항을 모두 충족합니다. 위에 설명된 단계에 따라 파티셔닝을 설정할 수 있습니다. 다음과 같이:

  1. 마스터 토토 사이트 추천은측정테이블, 다음과 같이 정확하게 선언됨 위.

  2. 다음으로 각 활성 월에 대해 하나의 파티션을 생성합니다.

    CREATE TABLE Measurement_y2006m02 ( ) 상속(측정);
    CREATE TABLE Measurement_y2006m03 ( ) INHERITS (측정값);
    ...
    CREATE TABLE Measurement_y2007m11 ( ) INHERITS (측정값);
    CREATE TABLE Measurement_y2007m12 ( ) INHERITS (측정값);
    CREATE TABLE Measurement_y2008m01 ( ) INHERITS (측정값);

    각 파티션은 그 자체로 완전한 토토 사이트 추천입니다 맞습니다. 하지만 그들은에서 정의를 상속받습니다.측정토토 사이트 추천.

    이것은 우리의 문제 중 하나인 오래된 데이터 삭제를 해결합니다. 각각 이번 달에 우리가 해야 할 일은 다음을 수행하는 것뿐입니다.드롭 토토 사이트 추천가장 오래된 하위 테이블에 그리고 새 달의 데이터에 대한 새 하위 테이블을 만듭니다.

  3. 우리는 겹치지 않는 테이블 제약 조건을 제공해야 합니다. 위와 같이 파티션 테이블을 생성하는 것보다 테이블 생성 스크립트는 실제로 다음과 같아야 합니다.

    CREATE TABLE 측정_y2006m02(
        CHECK( logdate = DATE '2006-02-01' AND logdate < DATE '2006-03-01' )
    ) 상속(측정);
    CREATE TABLE 측정_y2006m03(
        CHECK( logdate = DATE '2006-03-01' AND logdate < DATE '2006-04-01' )
    ) 상속(측정);
    ...
    CREATE TABLE 측정_y2007m11(
        CHECK( logdate = DATE '2007-11-01' AND logdate < DATE '2007-12-01' )
    ) 상속(측정);
    CREATE TABLE 측정_y2007m12(
        CHECK( logdate = DATE '2007-12-01' AND logdate < DATE '2008-01-01' )
    ) 상속(측정);
    CREATE TABLE 측정_y2008m01(
        CHECK( logdate = DATE '2008-01-01' AND logdate < DATE '2008-02-01' )
    ) 상속(측정);
  4. 아마도 키 열에도 색인이 필요할 것입니다.

    CREATE INDEX 측정_y2006m02_logdate ON 측정_y2006m02(로그날짜);
    CREATE INDEX 측정_y2006m03_logdate ON 측정_y2006m03(logdate);
    ...
    CREATE INDEX 측정_y2007m11_logdate ON 측정_y2007m11(logdate);
    CREATE INDEX 측정_y2007m12_logdate ON 측정_y2007m12(logdate);
    측정_y2008m01_logdate ON 측정 INDEX 생성_y2008m01(로그 날짜);

    현재로서는 더 이상 색인을 추가하지 않기로 결정했습니다.

  5. 우리는 애플리케이션이 다음과 같이 말할 수 있기를 원합니다.측정에 삽입 ...그리고 데이터가 적절한 파티션 테이블로 리디렉션됩니다. 우리 적절한 트리거 기능을 부착하여 이를 조정할 수 있습니다. 마스터 테이블로. 데이터만 추가되는 경우 최신 파티션에서는 매우 간단한 트리거를 사용할 수 있습니다. 기능:

    함수 생성 또는 교체 Measurement_insert_trigger()
    $$로 트리거 반환
    시작
        측정_y2008m01 값에 삽입(신규.*);
        NULL을 반환합니다.
    끝;
    $$
    언어 plpgsql;

    함수를 생성한 후 우리는 트리거를 생성합니다. 트리거 함수를 호출합니다:

    트리거 생성 insert_measurement_trigger
        측정 시 삽입 전
        각 행 실행 절차에 대해 Measurement_insert_trigger();

    우리는 매월 트리거 기능을 재정의해야 합니다. 항상 현재 파티션을 가리킵니다. 방아쇠 그러나 정의는 업데이트할 필요가 없습니다.

    우리는 데이터를 삽입하고 서버를 갖고 싶을 수도 있습니다 행이 있는 파티션을 자동으로 찾습니다. 추가되어야 합니다. 좀 더 복잡한 방법으로 이 작업을 수행할 수 있습니다. 예를 들어 트리거 함수는 다음과 같습니다.

    함수 생성 또는 교체 Measurement_insert_trigger()
    $$로 트리거 반환
    시작
        IF ( NEW.logdate = 날짜 '2006-02-01' AND
             NEW.logdate < DATE '2006-03-01' ) THEN
            측정_y2006m02 값에 삽입(신규.*);
        ELSIF( NEW.logdate = 날짜 '2006-03-01' AND
                NEW.logdate < DATE '2006-04-01' ) THEN
            측정_y2006m03 값에 삽입(신규.*);
        ...
        ELSIF( NEW.logdate = 날짜 '2008-01-01' AND
                NEW.logdate < DATE '2008-02-01' ) THEN
            측정_y2008m01 값에 삽입(신규.*);
        그 외
            RAISE EXEPTION '날짜가 범위를 벗어났습니다.  Measurement_insert_trigger() 함수를 수정하세요!';
        종료하면;
        NULL을 반환합니다.
    끝;
    $$
    언어 plpgsql;

    트리거 정의는 이전과 동일합니다. 참고하세요 각각IF테스트는 정확히 일치해야 합니다.확인제약조건 파티션.

    이 기능은 다음보다 더 복잡하지만 한 달의 경우 자주 업데이트할 필요가 없습니다. 분기가 필요하기 전에 미리 추가될 수 있기 때문입니다.

    참고:실제로는 다음을 확인하는 것이 가장 좋습니다. 대부분의 삽입이 들어가는 경우 최신 파티션부터 먼저 그 파티션. 단순화를 위해 우리는 다른 부분과 동일한 순서로 트리거 테스트를 수행합니다. 이 예입니다.

우리가 볼 수 있듯이 복잡한 파티션 구성에는 상당한 양의 DDL. 위의 예에서 우리는 매달 새 파티션을 생성하므로 다음을 수행하는 것이 현명할 수 있습니다. 필요한 DDL을 생성하는 스크립트 작성 자동으로.

5.9.3. 관리 파티션

일반적으로 처음에 설정된 파티션 세트 테이블을 정의하는 것은 정적으로 유지되지 않습니다. 그것은 일반적으로 데이터의 오래된 파티션을 제거하고 새 데이터에 대해 주기적으로 새 파티션을 추가합니다. 가장 많은 것 중 하나 파티셔닝의 중요한 이점은 바로 다음과 같습니다. 그렇지 않으면 고통스러운 작업이 거의 실행될 수 있습니다. 파티션 구조를 조작하여 즉시 대량의 데이터를 물리적으로 이동하는 것보다.

오래된 데이터를 제거하는 가장 간단한 옵션은 간단히 삭제하는 것입니다. 더 이상 필요하지 않은 파티션:

드롭 토토 사이트 추천 측정_y2006m02;

이것은 수백만 개의 기록을 매우 빠르게 삭제할 수 있습니다. 모든 기록을 개별적으로 삭제할 필요는 없습니다.

흔히 선호되는 또 다른 옵션은 다음을 제거하는 것입니다. 파티션을 나눈 테이블에서 파티션을 나누지만 다음과 같이 액세스 권한을 유지합니다. 그 자체로 테이블이 됩니다:

ALTER TABLE Measurement_y2006m02 NO INHERIT 측정;

이를 통해 데이터에 대한 추가 작업을 수행할 수 있습니다. 떨어지기 전에. 예를 들어, 이것은 종종 유용한 시간입니다 다음을 사용하여 데이터를 백업합니다.복사, pg_dump또는 유사한 도구. 그것 또한 데이터를 더 작은 단위로 집계하는 데 유용한 시간이 될 수도 있습니다. 형식을 지정하거나, 기타 데이터 조작을 수행하거나, 보고서를 실행합니다.

마찬가지로 우리는 새로운 데이터를 처리하기 위해 새로운 파티션을 추가할 수 있습니다. 우리 다음과 같이 분할된 테이블에 빈 파티션을 생성할 수 있습니다. 원래 파티션은 위에서 생성되었습니다.

테이블 생성 측정_y2008m02(
    CHECK( logdate = DATE '2008-02-01' AND logdate < DATE '2008-03-01' )
) 상속(측정);

대안으로 때로는 다음을 생성하는 것이 더 편리합니다. 파티션 구조 외부에 새 테이블을 만들고 나중에 적절한 파티션을 설정하세요. 이를 통해 데이터를 로드할 수 있습니다. 확인하고 표시되기 전에 변환했습니다. 파티션을 나눈 테이블:

테이블 생성 측정_y2008m02
  (제약 조건을 포함하는 기본값을 포함하는 측정과 유사);
ALTER TABLE 측정_y2008m02 제약조건 추가 y2008m02
   CHECK ( logdate = DATE '2008-02-01' AND logdate < DATE '2008-03-01' );
\ 'measurement_y2008m02'에서 측정_y2008m02 복사
-- 아마도 다른 데이터 준비 작업
ALTER TABLE Measurement_y2008m02 INHERIT 측정;

5.9.4. 파티셔닝 및 제약조건 제외

제약조건 제외쿼리입니다 성능을 향상시키는 최적화 기술 위에서 설명한 방식으로 정의된 분할 테이블입니다. 다음과 같이 예:

SET Constraint_exclusion = 켜기;
SELECT 개수(*) FROM 측정 WHERE logdate = DATE '2008-01-01';

제약조건 제외가 없으면 위 쿼리는 스캔합니다. 의 각 파티션측정토토 사이트 추천. 제약조건 제외 포함 활성화되면 플래너는 각 제약 조건을 검사합니다. 분할하고 분할이 필요하지 않다는 것을 증명하려고 노력하십시오. 조건을 충족하는 행을 포함할 수 없기 때문에 스캔되었습니다. 쿼리어디에서절. 기획자는 언제 이를 증명할 수 있으면 쿼리에서 파티션을 제외합니다. 계획.

당신은 다음을 사용할 수 있습니다설명명령을 내리다 다음 계획의 차이점을 보여주세요.constraint_exclusion켜져 있고 꺼진 계획도 있습니다. 이러한 유형의 테이블 설정에 대한 일반적인 최적화되지 않은 계획은 다음과 같습니다.

SET Constraint_exclusion = 꺼짐;
EXPLAIN SELECT count(*) FROM 측정 WHERE logdate = DATE '2008-01-01';

                                          쿼리 계획
---------------------------------------------------------------------
 집계(비용=158.66..158.68행=1 너비=0)
   - 추가(비용=0.00..151.88행=2715너비=0)
         - 측정 시 Seq 스캔(비용=0.00..30.38행=543너비=0)
               필터: (로그 날짜 = '2008-01-01'::날짜)
         - 측정 시 Seq 스캔_y2006m02 측정(비용=0.00..30.38행=543너비=0)
               필터: (로그 날짜 = '2008-01-01'::날짜)
         - 측정 시 Seq 스캔_y2006m03 측정(비용=0.00..30.38행=543너비=0)
               필터: (로그 날짜 = '2008-01-01'::날짜)
...
         - 측정 시 Seq 스캔_y2007m12 측정(비용=0.00..30.38행=543너비=0)
               필터: (로그 날짜 = '2008-01-01'::날짜)
         - 측정 시 Seq 스캔_y2008m01 측정(비용=0.00..30.38행=543너비=0)
               필터: (로그 날짜 = '2008-01-01'::날짜)

파티션의 일부 또는 전체가 인덱스 스캔을 대신 사용할 수 있습니다. 전체 테이블 순차 스캔이 있지만 여기서 중요한 점은 응답하기 위해 이전 파티션을 전혀 스캔할 필요가 없습니다. 이 쿼리. 제약 조건 제외를 활성화하면 다음과 같은 결과를 얻습니다. 동일한 것을 제공하는 훨씬 더 저렴한 계획 대답:

SET Constraint_exclusion = 켜기;
EXPLAIN SELECT count(*) FROM 측정 WHERE logdate = DATE '2008-01-01';
                                          쿼리 계획
---------------------------------------------------------------------
 집계(비용=63.47..63.48행=1너비=0)
   - 추가(비용=0.00..60.75행=1086너비=0)
         - 측정 시 Seq 스캔(비용=0.00..30.38행=543너비=0)
               필터: (로그 날짜 = '2008-01-01'::날짜)
         - 측정 시 Seq 스캔_y2008m01 측정(비용=0.00..30.38행=543너비=0)
               필터: (로그 날짜 = '2008-01-01'::날짜)

제약조건 제외는 다음에 의해서만 구동됩니다.확인제약조건이 존재하지 않음 인덱스. 따라서 인덱스를 정의할 필요가 없습니다. 키 열. 특정 인덱스에 대해 인덱스를 생성해야 하는지 여부 파티션은 스캔하는 쿼리를 예상하는지 여부에 따라 달라집니다. 파티션은 일반적으로 파티션의 많은 부분을 스캔합니다. 아니면 단지 작은 부분일 뿐이죠. 색인은 후자에 도움이 될 것입니다 경우는 있지만 전자는 아닙니다.

기본(권장) 설정은constraint_exclusion실제로는 둘 다 아닙니다켜짐도 아니고꺼짐, 그러나 중간 설정은파티션, 이는 기술을 유발합니다. 작업할 가능성이 있는 쿼리에만 적용됩니다. 분할된 토토 사이트 추천.켜짐설정 기획자가 조사하게 만듭니다.확인모든 쿼리의 제약 조건, 심지어는 가능성이 없는 간단한 쿼리도 포함 이익을 얻으려고.

5.9.5. 대체 파티셔닝 방법

삽입물을 적절한 파티션 테이블은 규칙을 설정하는 것입니다. 트리거, 마스터 테이블에서. 예를 들면:

규칙 만들기 Measurement_insert_y2006m02 AS
측정 위치에 삽입 중
    ( logdate = DATE '2006-02-01' AND logdate < DATE '2006-03-01' )
대신에
    측정_y2006m02 값에 삽입(신규.*);
...
측정 규칙 만들기_insert_y2008m01 AS
측정 위치에 삽입 중
    ( logdate = DATE '2008-01-01' AND logdate < DATE '2008-02-01' )
대신에
    측정_y2008m01 값에 삽입(신규.*);

규칙은 트리거보다 훨씬 더 많은 오버헤드를 가지고 있지만, 오버헤드는 행당 한 번이 아닌 쿼리당 한 번 지불됩니다. 따라서 이 방법은 대량 삽입에 유리할 수 있습니다. 상황. 그러나 대부분의 경우 트리거 방법은 더 나은 성능을 제공합니다.

주의하세요복사규칙을 무시합니다. 사용하고 싶다면복사삽입하다 데이터를 올바른 파티션 테이블에 복사해야 합니다. 주인이 되기보다는.복사그렇습니다 방아쇠를 발사하므로 다음을 사용하면 정상적으로 사용할 수 있습니다. 트리거 접근 방식.

규칙 접근 방식의 또 다른 단점은 규칙 세트가 그렇지 않은 경우 오류를 강제하는 간단한 방법은 없습니다. 삽입 날짜를 가리십시오. 데이터는 자동으로 대신 마스터 토토 사이트 추천을 사용하세요.

파티션은 다음을 사용하여 정렬할 수도 있습니다.유니온 전체뷰, 토토 사이트 추천 상속 대신. 예를 들어,

다음으로 측정 보기 생성
          SELECT * FROM 측정_y2006m02
UNION ALL SELECT * FROM 측정_y2006m03
...
UNION ALL SELECT * FROM 측정_y2007m11
UNION ALL SELECT * FROM 측정_y2007m12
UNION ALL SELECT * FROM 측정_y2008m01;

그러나 보기를 다시 생성해야 하는 필요성은 추가 단계를 추가합니다. 데이터 세트의 개별 파티션을 추가하고 삭제합니다. 에서 이 방법을 연습하는 것은 다른 방법에 비해 권장할 만한 것이 거의 없습니다. 상속을 사용합니다.

5.9.6. 주의사항

분할된 테이블에는 다음 주의사항이 적용됩니다:

  • 모든 내용을 확인하는 자동 방법은 없습니다.확인제약조건은 상호적입니다. 독점. 생성하는 코드를 만드는 것이 더 안전합니다. 연관된 객체를 분할하고 생성 및/또는 수정합니다. 각각을 손으로 쓰는 것보다.

  • 여기에 표시된 체계는 파티션 키가 행의 열은 절대 변경되지 않거나 적어도 변경되지 않습니다. 다른 파티션으로 이동해야 할 만큼 충분합니다. 안업데이트그것을 시도하고 있습니다 다음 때문에 실패할 것입니다.확인제약. 그러한 경우를 처리해야 하는 경우 다음을 수행할 수 있습니다. 적절한 업데이트가 파티션 테이블에서 트리거되지만 구조 관리가 훨씬 더 쉬워집니다. 복잡하다.

  • 수동을 사용하는 경우진공또는분석명령, 잊지 마세요 각 파티션에서 개별적으로 실행해야 합니다. 에이 다음과 같은 명령:

    측정 분석;

    마스터 토토 사이트 추천만 처리합니다.

제약조건 제외에는 다음 주의사항이 적용됩니다:

  • 제약조건 제외는 쿼리가 다음과 같은 경우에만 작동합니다.어디에서절에 상수가 포함되어 있습니다. 에이 매개변수화된 쿼리는 최적화되지 않습니다. 플래너는 매개변수 값이 어떤 파티션인지 알 수 없습니다. 런타임 시 선택할 수 있습니다. 같은 이유로,"안정적"다음과 같은 함수CURRENT_DATE피해야 합니다.

  • 파티셔닝 제약 조건을 단순하게 유지하십시오. 그렇지 않으면 플래너는 파티션에 필요하지 않다는 것을 증명하지 못할 수도 있습니다. 방문할. 목록에 간단한 동등 조건 사용 분할 또는 범위 분할을 위한 간단한 범위 테스트, 앞의 예에서 설명한 대로. 좋은 규칙 경험상 파티셔닝 제약 조건에는 다음과 같은 항목만 포함되어야 합니다. 분할 열과 상수의 비교 B-트리 색인 생성 가능 연산자를 사용합니다.

  • 마스터 테이블의 모든 파티션에 대한 모든 제약 조건 제약 조건 제외 중에 검사되므로 숫자가 많습니다. 파티션으로 인해 쿼리 계획 시간이 늘어날 가능성이 높습니다. 상당히. 이러한 기술을 사용한 파티셔닝은 효과적입니다. 최대 100개의 파티션이 있을 수 있습니다. 노력하지 마세요 수천 개의 파티션을 사용합니다.