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

5.9. 파티셔닝

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

5.9.1. 개요

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

  • 특정 상황, 특히 테이블에서 많이 액세스되는 행의 대부분이 단일 스포츠 토토 결과 또는 소수의 스포츠 토토 결과에 있는 경우 쿼리 성능이 크게 향상될 수 있습니다. 분할은 인덱스의 선행 열을 대체하여 인덱스 크기를 줄이고 인덱스에서 많이 사용되는 부분이 메모리에 들어갈 가능성을 높입니다.

  • 쿼리 또는 업데이트가 단일 스포츠 토토 결과의 상당 부분에 액세스하는 경우 전체 테이블에 분산된 인덱스 및 무작위 액세스 읽기를 사용하는 대신 해당 스포츠 토토 결과의 순차적 스캔을 활용하여 성능을 향상시킬 수 있습니다.

  • 스포츠 토토 결과 설계에 해당 요구 사항이 계획된 경우 스포츠 토토 결과을 추가하거나 제거하여 대량 로드 및 삭제를 수행할 수 있습니다.상속되지 않은 테이블 변경그리고드롭 테이블둘 다 대량 작업보다 훨씬 빠릅니다. 이 명령은 또한 다음을 완전히 피합니다.진공대량으로 인한 오버헤드삭제.

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

이점은 일반적으로 테이블이 매우 클 경우에만 가치가 있습니다. 테이블 분할로 이점을 얻을 수 있는 정확한 지점은 애플리케이션에 따라 다르지만 경험상 테이블 크기는 데이터베이스 서버의 물리적 메모리를 초과해야 합니다.

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

다음 형태의 파티셔닝을 구현할 수 있습니다.PostgreSQL:

범위 분할

테이블은 다음과 같이 분할되어 있습니다."범위"키 열 또는 열 집합으로 정의되며, 서로 다른 스포츠 토토 결과에 할당된 값 범위 간에 중복되지 않습니다. 예를 들어 날짜 범위 또는 특정 비즈니스 개체에 대한 식별자 범위를 기준으로 분할할 수 있습니다.

목록 분할

테이블은 각 스포츠 토토 결과에 나타나는 키 값을 명시적으로 나열하여 스포츠 토토 결과됩니다.

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. 우리는 겹치지 않는 테이블 제약 조건을 제공해야 합니다. 위와 같이 스포츠 토토 결과 테이블을 생성하는 대신 테이블 생성 스크립트는 실제로 다음과 같아야 합니다.

    테이블 생성 측정_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. 아마도 키 열에도 색인이 필요할 것입니다.

    측정 인덱스 생성 측정_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또는 유사한 도구. 또한 데이터를 더 작은 형식으로 집계하거나, 다른 데이터 조작을 수행하거나, 보고서를 실행하는 데 유용한 시간이 될 수도 있습니다.

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

CREATE TABLE 측정_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_TIMESTAMP플래너는 런타임 시 함수 값이 어느 스포츠 토토 결과에 포함될 수 있는지 알 수 없으므로 최적화할 수 없습니다.

  • 파티셔닝 제약 조건을 단순하게 유지하세요. 그렇지 않으면 계획자는 스포츠 토토 결과을 방문할 필요가 없다는 것을 증명하지 못할 수도 있습니다. 이전 예제에 설명된 대로 목록 분할에는 간단한 동일 조건을 사용하고, 범위 분할에는 간단한 범위 테스트를 사용합니다. 경험에 따르면 분할 제약 조건에는 B-트리 색인 생성 가능 연산자를 사용하여 분할 열과 상수의 비교만 포함되어야 합니다.

  • 마스터 테이블의 모든 스포츠 토토 결과에 대한 모든 제약 조건은 제약 조건 제외 중에 검사되므로 스포츠 토토 결과 수가 많으면 쿼리 계획 시간이 상당히 늘어날 수 있습니다. 이러한 기술을 사용한 파티셔닝은 최대 100개의 스포츠 토토 결과에서도 잘 작동합니다. 수천 개의 스포츠 토토 결과을 사용하려고 하지 마십시오.