| PostgreSQL 9.2.24 문서 | ||||
|---|---|---|---|---|
| 토토 : 문서 : 9.2 : 상속 | 스포츠 토토 : 문서 : 9.2 : 데이터 정의 | 제5장. 데이터 정의 | PostgreSQL : 문서 : 9.2 : 외국 토토 사이트 순위 | |
포스트그레SQL기본 지원 테이블 파티셔닝. 이 섹션에서는 이유와 방법을 설명합니다. 데이터베이스 설계의 일부로 분할을 구현합니다.
분할이란 논리적으로 하나의 큰 것을 분할하는 것을 의미합니다. 테이블을 더 작은 물리적 조각으로 나눕니다. 파티셔닝은 다음을 제공할 수 있습니다. 여러 가지 이점:
쿼리 성능은 다음에서 크게 향상될 수 있습니다. 특정 상황, 특히 대부분의 경우 테이블의 액세스된 행이 단일 윈 토토에 있거나 윈 토토 수가 적습니다. 파티셔닝 대체물 인덱스의 선행 열에 대해 인덱스 크기를 줄이고 많이 사용되는 부분이 인덱스는 메모리에 맞습니다.
쿼리 또는 업데이트가 많은 부분에 액세스할 때 단일 윈 토토을 사용하면 성능이 향상될 수 있습니다. 대신 해당 윈 토토의 순차적 스캔 이점 인덱스와 분산된 랜덤 액세스 읽기를 사용하여 테이블 전체.
대량 로드 및 삭제는 다음을 추가하여 수행할 수 있습니다. 해당 요구 사항이 계획된 경우 윈 토토 제거 윈 토토 디자인.테이블 번호 변경 상속그리고드롭 테이블있습니다 둘 다 대량 작업보다 훨씬 빠릅니다. 이 명령들도 완전히 피하십시오진공오버헤드 대량으로 인해 발생함삭제.
자주 사용하지 않는 데이터를 더 저렴하고 느린 데이터로 마이그레이션할 수 있습니다. 저장 매체.
이 혜택은 일반적으로 테이블이 있을 때만 가치가 있습니다. 그렇지 않으면 매우 클 것입니다. 테이블이 있는 정확한 지점 애플리케이션에 따라 윈 토토의 이점을 누릴 수 있습니다. 경험상 테이블의 크기는 데이터베이스 서버의 물리적 메모리를 초과합니다.
현재,PostgreSQL테이블 상속을 통한 파티셔닝을 지원합니다. 각 윈 토토 단일 상위 테이블의 하위 테이블로 생성되어야 합니다. 그만큼 상위 테이블 자체는 일반적으로 비어 있습니다. 그것은 단지 존재한다 전체 데이터 세트를 나타냅니다. 당신은 익숙해야합니다 상속(참조토토 : 문서 : 9.2 : 상속) 윈 토토 설정을 시도하기 전에.
다음 형태의 파티셔닝을 구현할 수 있습니다.PostgreSQL:
테이블은 다음과 같이 분할되어 있습니다."범위"키 열 또는 집합으로 정의됨 값 범위 간에 겹치지 않는 열 다른 윈 토토에 할당됩니다. 예를 들어 날짜 범위 또는 식별자 범위별로 분할 특정 비즈니스 개체.
테이블은 명시적으로 나열하여 분할되었습니다. 키 값은 각 윈 토토에 나타납니다.
윈 토토된 테이블을 설정하려면 다음을 수행하십시오:
생성"마스터"테이블, 모든 윈 토토이 상속됩니다.
이 테이블에는 데이터가 포함되지 않습니다. 검사를 정의하지 마세요. 당신이 의도하지 않는 이상 이 테이블에 대한 제약 조건이 적용됩니다. 모든 윈 토토에 동일하게 적용됩니다. 아무 의미가 없습니다 이에 대한 인덱스 또는 고유 제약 조건을 정의하고, 어느 하나.
여러 개 생성"아이"테이블 각각은 마스터 테이블에서 상속됩니다. 일반적으로 이러한 테이블은 상속된 집합에 어떤 열도 추가하지 않습니다. 주인님.
하지만 우리는 하위 테이블을 윈 토토이라고 부르겠습니다. 그들은 모든 면에서 정상입니다PostgreSQL테이블.
정의할 윈 토토 테이블에 테이블 제약조건을 추가하세요. 각 윈 토토에 허용되는 키 값입니다.
전형적인 예는 다음과 같습니다:
확인( x = 1 ) CHECK( 카운티 IN( '옥스퍼드셔', '버킹엄셔', '워릭셔' )) 확인( 콘센트 ID = 100 AND 콘센트 ID < 200 )
제약조건이 다음이 없음을 보장하는지 확인하세요. 서로 다른 키 값 사이의 중복이 허용됩니다. 윈 토토. 흔히 저지르는 실수는 범위 제한을 설정하는 것입니다. 좋다:
확인( 콘센트 ID 100~200 사이) 확인(200~300 사이의 콘센트 ID)
이것은 어느 윈 토토이 명확하지 않기 때문에 잘못된 것입니다. 키 값 200이 속해 있습니다.
범위 간 구문에는 차이가 없습니다. 그리고 목록 분할; 그 용어는 설명적이다 오직.
각 윈 토토에 대해 키에 인덱스를 생성하십시오 열뿐만 아니라 원하는 기타 인덱스도 포함됩니다. (키 인덱스는 꼭 필요한 것은 아니지만 대부분의 경우 시나리오가 도움이 됩니다. 핵심 가치를 다음과 같이 설정하려는 경우 고유한 경우 항상 고유한 또는 각 윈 토토에 대한 기본 키 제약 조건입니다.)
선택적으로 데이터를 리디렉션하는 트리거 또는 규칙 정의 마스터 테이블에 적절한 위치에 삽입됨 분할.
다음을 확인하세요.constraint_exclusion구성 매개변수는 다음에서 비활성화되지 않았습니다.postgresql.conf. 그렇다면 쿼리는 수행되지 않습니다. 원하는 대로 최적화하세요.
예를 들어, 우리가 다음을 위한 데이터베이스를 구축한다고 가정해 보겠습니다. 대형 아이스크림 회사. 회사는 최고 기온을 측정합니다. 매일매일, 지역별 아이스크림 판매도 함께 진행됩니다. 개념적으로 우리는 다음과 같은 테이블을 원합니다.
테이블 측정 생성(
    city_id int는 null이 아닙니다.
    logdate 날짜가 null이 아닙니다.
    피크 온도 정수,
    단위 판매 정수
);
    우리는 대부분의 쿼리가 지난 주에만 액세스한다는 것을 알고 있습니다. 이 테이블의 주요 사용 이후 월별 또는 분기별 데이터 관리를 위한 온라인 보고서를 준비하는 것입니다. 줄이기 위해 저장해야 하는 오래된 데이터의 양에 따라 최근 3년간의 데이터를 보관합니다. 시작 부분에 매달 가장 오래된 달의 데이터가 삭제됩니다.
이 상황에서 우리는 분할을 사용하여 다음을 충족할 수 있습니다. 측정 테이블에 대한 우리의 다양한 요구 사항을 모두 충족합니다. 위에 설명된 단계에 따라 파티셔닝을 설정할 수 있습니다. 다음과 같이:
마스터 테이블은측정테이블, 다음과 같이 정확하게 선언됨 위에.
다음으로 각 활성 월에 대해 하나의 윈 토토을 생성합니다:
CREATE TABLE 측정_y2006m02 ( ) 상속(측정); CREATE TABLE Measurement_y2006m03 ( ) INHERITS (측정값); ... CREATE TABLE Measurement_y2007m11 ( ) INHERITS (측정값); CREATE TABLE Measurement_y2007m12 ( ) INHERITS (측정값); CREATE TABLE Measurement_y2008m01 ( ) INHERITS (측정값);
각 윈 토토은 그 자체로 완전한 테이블입니다 맞습니다. 하지만 그들은에서 정의를 상속받습니다.측정테이블.
이것은 우리의 문제 중 하나인 오래된 데이터 삭제를 해결합니다. 각 이번 달에 우리가 해야 할 일은 다음을 수행하는 것뿐입니다.드롭 테이블가장 오래된 하위 테이블에 그리고 새 달의 데이터에 대한 새 하위 테이블을 만듭니다.
우리는 겹치지 않는 테이블 제약조건을 제공해야 합니다. 위와 같이 윈 토토 테이블을 생성하는 것보다 테이블 생성 스크립트는 실제로 다음과 같아야 합니다.
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' )
) 상속(측정);
      아마도 키 열에도 색인이 필요할 것입니다:
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(로그 날짜);
현재로서는 더 이상 색인을 추가하지 않기로 결정했습니다.
우리는 애플리케이션이 다음과 같이 말할 수 있기를 원합니다.측정에 삽입 ...그리고 데이터가 적절한 윈 토토 테이블로 리디렉션됩니다. 우리 적절한 트리거 기능을 부착하여 이를 조정할 수 있습니다. 마스터 테이블로. 데이터만 추가되는 경우 최신 윈 토토에서는 매우 간단한 트리거를 사용할 수 있습니다. 기능:
함수 생성 또는 교체 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을 생성하는 스크립트 작성 자동으로.
일반적으로 처음에 설정된 윈 토토 세트 테이블을 정의하는 것은 정적으로 유지되지 않습니다. 그것은 일반적으로 데이터의 오래된 윈 토토을 제거하고 새 데이터에 대해 주기적으로 새 윈 토토을 추가합니다. 가장 많은 것 중 하나 파티셔닝의 중요한 이점은 바로 다음과 같습니다. 그렇지 않으면 고통스러운 작업이 거의 실행될 수 있습니다. 윈 토토 구조를 조작하여 즉시 대량의 데이터를 물리적으로 이동하는 것보다.
오래된 데이터를 제거하는 가장 간단한 옵션은 간단히 삭제하는 것입니다. 더 이상 필요하지 않은 윈 토토:
드롭 테이블 측정_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 측정;
제약조건 제외쿼리입니다 성능을 향상시키는 최적화 기술 위에서 설명한 방식으로 정의된 분할 테이블입니다. 처럼 예:
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실제로 둘 다 아님켜짐아니요꺼짐, 그러나 중간 설정은윈 토토, 이는 기술을 유발합니다. 작업할 가능성이 있는 쿼리에만 적용됩니다. 분할된 테이블. 그만큼켜짐설정 기획자가 조사하게 만듭니다.확인모든 쿼리의 제약 조건, 심지어는 가능성이 없는 간단한 쿼리도 포함 이익을 얻으려고.
삽입물을 적절한 윈 토토 테이블은 규칙을 설정하는 것입니다. 트리거, 마스터 테이블에서. 예를 들어:
규칙 만들기 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;
    그러나 보기를 다시 생성해야 하는 필요성은 추가 단계를 추가합니다. 데이터 세트의 개별 윈 토토을 추가하고 삭제합니다. ~ 안에 이 방법을 연습하는 것은 다른 방법에 비해 권장할 만한 것이 거의 없습니다. 상속을 사용합니다.
분할된 테이블에는 다음 주의사항이 적용됩니다:
모든 내용을 확인하는 자동 방법은 없습니다.확인제약조건은 상호적입니다. 독점적인. 생성하는 코드를 만드는 것이 더 안전합니다. 연관된 객체를 분할하고 생성 및/또는 수정합니다. 각각을 손으로 쓰는 것보다.
여기에 표시된 체계는 윈 토토 키가 행의 열은 절대 변경되지 않거나 적어도 변경되지 않습니다. 다른 윈 토토으로 이동해야 할 만큼 충분합니다. 안업데이트그런 일을 시도하는 사람 다음 때문에 실패할 것입니다.확인제약. 그러한 경우를 처리해야 하는 경우 다음을 수행할 수 있습니다. 적절한 업데이트가 윈 토토 테이블에서 트리거되지만 구조 관리가 훨씬 더 쉬워집니다. 복잡한.
수동을 사용하는 경우진공또는분석명령, 잊지 마세요 각 윈 토토에서 개별적으로 실행해야 합니다. 에이 다음과 같은 명령:
측정 분석;
마스터 테이블만 처리합니다.
제약조건 제외에는 다음 주의사항이 적용됩니다:
제약조건 제외는 쿼리가 다음과 같은 경우에만 작동합니다.어디절에 상수가 포함되어 있습니다.
        (또는 외부에서 제공되는 매개변수). 예를 들어,
        다음과 같은 불변 함수와의 비교CURRENT_TIMESTAMP될 수 없습니다
        최적화됨, 플래너가 어떤 윈 토토을 알 수 없기 때문에
        함수 값은 런타임에 포함될 수 있습니다.
파티셔닝 제약 조건을 단순하게 유지하십시오. 그렇지 않으면 플래너는 윈 토토에 필요하지 않다는 것을 증명하지 못할 수도 있습니다. 방문할. 목록에 간단한 동등 조건 사용 분할 또는 범위 분할을 위한 간단한 범위 테스트, 앞의 예에서 설명한 대로. 좋은 규칙 경험상 파티셔닝 제약 조건에는 다음과 같은 항목만 포함되어야 합니다. 분할 열과 상수의 비교 B-트리 색인 생성 가능 연산자를 사용합니다.
마스터 테이블의 모든 윈 토토에 대한 모든 제약 조건 제약 조건 제외 중에 검사되므로 숫자가 많습니다. 윈 토토으로 인해 쿼리 계획 시간이 늘어날 가능성이 높습니다. 상당히. 이러한 기술을 사용한 파티셔닝은 효과적입니다. 최대 100개의 윈 토토이 있을 수 있습니다. 노력하지 마세요 수천 개의 윈 토토을 사용합니다.