이 문서는 지원되지 않는 버전의 PostgreSQL을위한 것입니다.
당신은에 대해 같은 페이지를 볼 수 있습니다PostgreSQL : 문서 : 17 : 39.7. 윈 토토 대 트리거버전 또는 위에 나열된 다른 지원 버전 중 하나입니다.

39.7. 토토 베이 대 트리거#

트리거를 사용하여 수행 할 수있는 많은 것들도를 사용하여 구현할 수 있습니다PostgreSQL토토 베이 시스템. 토토 베이으로 구현할 수없는 것 중 하나는 어떤 종류의 제약, 특히 외국 키입니다. 명령을 다시 쓰는 자격있는 토토 베이을 배치 할 수 있습니다.아무것도열의 값이 다른 테이블에 나타나지 않는 경우. 그러나 데이터가 조용히 버려지고 좋은 생각이 아닙니다. 유효한 값에 대한 검사가 필요하고 유효하지 않은 값의 경우 오류 메시지를 생성 해야하는 경우 트리거가 수행해야합니다..

이 장에서는 토토 베이을 사용하여보기를 업데이트하는 데 중점을 두었습니다. 이 장의 모든 업데이트 토토 베이 예제는를 사용하여 구현할 수도 있습니다.대신보기를 트리거합니다. 이러한 트리거를 작성하는 것은 종종 토토 베이을 작성하는 것보다 쉽습니다. 특히 업데이트를 수행하기 위해 복잡한 논리가 필요한 경우

두 사람이 구현할 수있는 것들에 대해서는 데이터베이스 사용에 달려 있습니다. 영향을받는 각 행에 대해 트리거가 한 번 시작됩니다. 토토 베이은 쿼리를 수정하거나 추가 쿼리를 생성합니다. 따라서 한 명령문에서 많은 행이 영향을받는 경우, 하나의 추가 명령을 발행하는 토토 베이은 모든 단일 행을 요구하는 트리거보다 빠르며 여러 번해야 할 일을 다시 결정해야합니다. 그러나 트리거 접근법은 토토 베이 접근 방식보다 개념적으로 훨씬 간단하며 초보자가 올바르게되기가 더 쉽습니다.

여기서 우리는 한 가지 상황에서 토토 베이 대 트리거 선택이 어떻게 진행되는지에 대한 예를 보여줍니다. 두 개의 테이블이 있습니다 :

테이블 컴퓨터 생성 (
    호스트 이름 텍스트 - 색인
    제조업체 텍스트 - 색인
);

테이블 소프트웨어 생성 (
    소프트웨어 텍스트 - 색인
    hostname 텍스트 - 인덱스
);

두 테이블 모두 수천 개의 행이 있고 인덱스는hostname고유합니다. 토토 베이 또는 트리거는 행을 삭제하는 제한 조건을 구현해야합니다.소프트웨어삭제 된 컴퓨터를 참조하십시오. 방아쇠는이 명령을 사용합니다.

HostName = $ 1; 소프트웨어에서 삭제

트리거가 삭제 된 각 개별 행마다 트리거가 호출되므로컴퓨터,이 명령에 대한 계획을 준비하고 저장하고 전달할 수 있습니다.hostname매개 변수의 값. 규칙은 다음과 같이 작성됩니다.

컴퓨터로 삭제대로 Computer_del을 작성하십시오
    HostName = Old.HostName; 인 소프트웨어에서 삭제하십시오.

이제 우리는 다른 유형의 삭제를 살펴 봅니다. A :의 경우

hostName = 'mypc.local.net'; computer에서 삭제

테이블컴퓨터index (FAST)에 의해 스캔되며 트리거가 발행 한 명령은 인덱스 스캔 (빠른)도 사용합니다. 규칙의 추가 명령은 다음과 같습니다.

Computer.HostName = 'mypc.local.net'소프트웨어에서 삭제
                       및 Software.HostName = Computer.HostName;

적절한 색인이 설정되어 있으므로 플래너는의 계획을 작성합니다.

NestLoop
  - 컴퓨터에서 comp_hostidx를 사용한 색인 스캔
  - 소프트웨어에서 soft_hostidx를 사용한 색인 스캔

트리거와 토토 베이 구현 사이의 속도에는 그다지 차이가 ​​없습니다.

다음 삭제와 함께 우리는 어디에있는 2000 개의 컴퓨터를 모두 제거하고 싶습니다hostname시작old. 그렇게 할 두 가지 명령이 있습니다. 하나는 :

hostname = 'old'인 컴퓨터에서 삭제
                       및 hostname < 'olo'

규칙에 의해 추가 된 명령은 다음과 같습니다.

Computer.HostName = 'Old'및 Computer.HostName < '올레'소프트웨어에서 삭제
                       및 Software.HostName = Computer.HostName;

계획과 함께

해시 조인
  - 소프트웨어에서 SEQ 스캔
  - 해시
    - 컴퓨터에서 comp_hostidx를 사용한 색인 스캔

다른 가능한 명령은 다음과 같습니다.

호스트 이름 ~ '^Old';의 컴퓨터에서 삭제

규칙에 의해 추가 된 명령에 대한 다음 실행 계획을 초래합니다.

NestLoop
  - 컴퓨터에서 comp_hostidx를 사용한 색인 스캔
  - 소프트웨어에서 soft_hostidx를 사용한 색인 스캔

이것은 플래너가 자격이 있음을 인식하지 못한다는 것을 보여줍니다.hostnamein컴퓨터색인 스캔에도 사용될 수 있습니다소프트웨어여러 자격 표현이 결합 된 경우and, 이것은 명령의 일반 표현 버전에서하는 일입니다. 삭제 해야하는 2000 년 기존 컴퓨터 각각에 대해 트리거가 한 번 호출되며, 한 번의 인덱스 스캔이 발생합니다컴퓨터및 2000 인덱스 스캔소프트웨어. 토토 베이 구현은 인덱스를 사용하는 두 가지 명령으로 수행됩니다. 그리고 그것은 표의 전체 크기에 따라 다릅니다소프트웨어순차적 스캔 상황에서 토토 베이이 여전히 더 빠를 지 여부. SPI 관리자를 통한 트리거에서 2000 명령 실행은 모든 인덱스 블록이 곧 캐시에 있더라도 시간이 걸립니다.

우리가 보는 마지막 명령은 다음과 같습니다.

제조업체가있는 컴퓨터에서 삭제 = 'bim';

다시 많은 행이 삭제 될 수 있습니다컴퓨터. 따라서 트리거는 집행자를 통해 다시 많은 명령을 실행합니다. 규칙에 의해 생성 된 명령은 다음과 같습니다.

Computer.Manufacturer = 'BIM'소프트웨어에서 삭제
                       및 Software.HostName = Computer.HostName;

해당 명령에 대한 계획은 다시 두 개의 인덱스 스캔을 통해 중첩 된 루프가 될 것입니다.컴퓨터:

NestLoop
  - 컴퓨터에서 comp_manufidx를 사용한 색인 스캔
  - 소프트웨어에서 soft_hostidx를 사용한 색인 스캔

이 경우, 토토 베이 시스템의 추가 명령은 명령의 영향을받는 행의 수와 다소 독립적입니다.

요약은 토토 베이이 크고 자격을 갖춘 조인이 발생하는 경우, 플래너가 실패하는 상황입니다..