트리거를 사용하여 수행 할 수있는 많은 것들도를 사용하여 구현할 수 있습니다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를 사용한 색인 스캔
이것은 플래너가 자격이 있음을 인식하지 못한다는 것을 보여줍니다.hostname
in컴퓨터
색인 스캔에도 사용될 수 있습니다소프트웨어
여러 자격 표현이 결합 된 경우and
, 이것은 명령의 일반 표현 버전에서하는 일입니다. 삭제 해야하는 2000 년 기존 컴퓨터 각각에 대해 트리거가 한 번 호출되며, 한 번의 인덱스 스캔이 발생합니다컴퓨터
및 2000 인덱스 스캔소프트웨어
. 토토 베이 구현은 인덱스를 사용하는 두 가지 명령으로 수행됩니다. 그리고 그것은 표의 전체 크기에 따라 다릅니다소프트웨어
순차적 스캔 상황에서 토토 베이이 여전히 더 빠를 지 여부. SPI 관리자를 통한 트리거에서 2000 명령 실행은 모든 인덱스 블록이 곧 캐시에 있더라도 시간이 걸립니다.
우리가 보는 마지막 명령은 다음과 같습니다.
제조업체가있는 컴퓨터에서 삭제 = 'bim';
다시 많은 행이 삭제 될 수 있습니다컴퓨터
. 따라서 트리거는 집행자를 통해 다시 많은 명령을 실행합니다. 규칙에 의해 생성 된 명령은 다음과 같습니다.
Computer.Manufacturer = 'BIM'소프트웨어에서 삭제 및 Software.HostName = Computer.HostName;
해당 명령에 대한 계획은 다시 두 개의 인덱스 스캔을 통해 중첩 된 루프가 될 것입니다.컴퓨터
:
NestLoop - 컴퓨터에서 comp_manufidx를 사용한 색인 스캔 - 소프트웨어에서 soft_hostidx를 사용한 색인 스캔
이 경우, 토토 베이 시스템의 추가 명령은 명령의 영향을받는 행의 수와 다소 독립적입니다.
요약은 토토 베이이 크고 자격을 갖춘 조인이 발생하는 경우, 플래너가 실패하는 상황입니다..