| 윈 토토 : 문서 : 9.4 : 윈 토토 | |||
|---|---|---|---|
| PostgreSQL : 문서 : 9.4 : 토토 사이트 추천 및 명령 상태 | PostgreSQL : 문서 : 9.4 : 토토 커뮤니티 시스템 | 38장. 롤 토토 시스템 | 윈 토토 : 문서 : 9.4 : 절차 언어 |
트리거를 사용하여 수행할 수 있는 많은 작업은 다음을 사용하여 구현할 수도 있습니다.포스트그레SQL롤 토토 시스템. 롤 토토으로 구현할 수 없는 것 중 하나는 일종의 제약 조건, 특히 외래 키입니다. 명령을 다시 작성하는 규정된 롤 토토을 배치할 수 있습니다.아무것도 없음열의 값이 다른 테이블에 나타나지 않는 경우. 하지만 그러면 데이터가 조용히 버려지는데 이는 좋은 생각이 아닙니다. 유효한 값에 대한 확인이 필요하고 잘못된 값의 경우 오류 메시지가 생성되어야 하는 경우 트리거를 통해 수행되어야 합니다.
이 장에서는 규칙을 사용하여 보기를 업데이트하는 방법에 중점을 두었습니다. 이 장의 모든 업데이트 규칙 예제는 다음을 사용하여 구현할 수도 있습니다.대신뷰를 트리거합니다. 이러한 트리거를 작성하는 것은 롤 토토을 작성하는 것보다 쉬운 경우가 많습니다. 특히 업데이트를 수행하는 데 복잡한 로직이 필요한 경우에는 더욱 그렇습니다.
두 가지 모두에 의해 구현될 수 있는 것 중 가장 좋은 것은 데이터베이스 사용에 따라 다릅니다. 영향을 받은 각 행에 대해 트리거가 한 번씩 실행됩니다. 롤 토토은 쿼리를 수정하거나 추가 쿼리를 생성합니다. 따라서 하나의 명령문에서 많은 행이 영향을 받는 경우 하나의 추가 명령을 실행하는 롤 토토은 모든 단일 행에 대해 호출되는 트리거보다 빠를 가능성이 높으며 수행할 작업을 여러 번 다시 결정해야 합니다. 그러나 트리거 접근 방식은 개념적으로 롤 토토 접근 방식보다 훨씬 간단하며 초보자가 올바르게 수행하기가 더 쉽습니다.
여기서 우리는 한 상황에서 롤 토토과 트리거의 선택이 어떻게 작용하는지에 대한 예를 보여줍니다. 두 개의 테이블이 있습니다:
테이블 컴퓨터 생성(
호스트 이름 텍스트, -- 색인화됨
제조업체 텍스트 - 색인화됨
);
CREATE TABLE 소프트웨어(
소프트웨어 텍스트, -- 색인화됨
호스트 이름 텍스트 - 색인화됨
);
두 테이블 모두 수천 개의 행과 색인을 가지고 있습니다.호스트 이름고유합니다. 롤 토토 또는 트리거는 행을 삭제하는 제약 조건을 구현해야 합니다.소프트웨어삭제된 컴퓨터를 참조합니다. 트리거는 다음 명령을 사용합니다.
호스트 이름 = $1인 소프트웨어에서 삭제;
트리거는 삭제된 각 개별 행에 대해 호출되므로컴퓨터, 이 명령에 대한 계획을 준비 및 저장하고 다음을 통과할 수 있습니다.호스트 이름매개변수의 값입니다. 규칙은 다음과 같이 작성됩니다.
컴퓨터 삭제 시 규칙computer_del 생성
호스트 이름 = OLD.hostname인 소프트웨어에서 삭제하세요.
이제 다양한 유형의 삭제를 살펴보겠습니다. 다음의 경우:
호스트 이름 = 'mypc.local.net'인 컴퓨터에서 삭제;
테이블컴퓨터은 인덱스로 스캔되며(빠름) 트리거에 의해 실행된 명령도 인덱스 스캔(빠름)을 사용합니다. 규칙의 추가 명령은 다음과 같습니다.
computer.hostname = 'mypc.local.net'인 소프트웨어에서 삭제
AND 소프트웨어.호스트 이름 = 컴퓨터.호스트 이름;
적절한 인덱스 설정이 있으므로 플래너는 다음 계획을 생성합니다.
네스트루프 - 컴퓨터에서 comp_hostidx를 사용하여 인덱스 스캔 - 소프트웨어에서 Soft_hostidx를 사용한 인덱스 스캔
따라서 트리거와 롤 토토 구현 사이의 속도에는 그다지 큰 차이가 없을 것입니다.
다음 삭제 시 우리는 다음이 있는 2000대의 컴퓨터를 모두 제거하고 싶습니다.호스트 이름다음으로 시작이전. 이를 수행할 수 있는 명령은 두 가지가 있습니다. 하나는 다음과 같습니다:
호스트 이름 = '이전'인 컴퓨터에서 삭제
AND 호스트 이름 < 'ole'
규칙에 의해 추가된 명령은 다음과 같습니다:
컴퓨터.호스트 이름 = '이전' AND 컴퓨터.호스트 이름 < 'ole'인 소프트웨어에서 삭제
AND 소프트웨어.호스트 이름 = 컴퓨터.호스트 이름;
계획과 함께
해시 조인
- 소프트웨어의 서열 스캔
- 해시
- 컴퓨터에서 comp_hostidx를 사용하여 인덱스 스캔
다른 가능한 명령은 다음과 같습니다:
호스트 이름 ~ '^old'가 있는 컴퓨터에서 삭제;
규칙에 의해 추가된 명령에 대한 실행 계획은 다음과 같습니다.
네스트루프 - 컴퓨터에서 comp_hostidx를 사용하여 인덱스 스캔 - 소프트웨어에서 Soft_hostidx를 사용한 인덱스 스캔
이것은 계획자가 다음에 대한 자격을 인식하지 못하고 있음을 보여줍니다.호스트 이름에컴퓨터다음의 인덱스 스캔에도 사용될 수 있습니다.소프트웨어여러 개의 한정 표현식이 결합된 경우그리고, 이는 명령의 정규 표현식 버전에서 수행되는 작업입니다. 트리거는 삭제해야 하는 기존 컴퓨터 2,000대 각각에 대해 한 번씩 호출되며, 그 결과 한 번의 인덱스 스캔이 수행됩니다.컴퓨터및 2000개 이상의 색인 스캔소프트웨어. 규칙 구현에서는 인덱스를 사용하는 두 개의 명령을 사용하여 이를 수행합니다. 그리고 테이블의 전체 크기에 따라 다릅니다.소프트웨어순차 스캔 상황에서 롤 토토이 여전히 더 빠른지 여부. SPI 관리자를 통한 트리거의 2000개 명령 실행은 모든 인덱스 블록이 곧 캐시에 저장되더라도 다소 시간이 걸립니다.
우리가 살펴보는 마지막 명령은 다음과 같습니다:
제조업체 = 'bim'인 컴퓨터에서 삭제;
또한 이로 인해 많은 행이 삭제될 수 있습니다.컴퓨터. 따라서 트리거는 실행기를 통해 많은 명령을 다시 실행합니다. 규칙에 의해 생성된 명령은 다음과 같습니다.
computer.manufacturer = 'bim'인 소프트웨어에서 삭제
AND 소프트웨어.호스트 이름 = 컴퓨터.호스트 이름;
해당 명령에 대한 계획은 다시 두 개의 인덱스 스캔에 대한 중첩 루프가 될 것이며 오직 다른 인덱스만 사용하는 것입니다.컴퓨터:
네스트루프 - 컴퓨터에서 comp_manufidx를 사용하여 인덱스 스캔 - 소프트웨어에서 Soft_hostidx를 사용한 인덱스 스캔
이러한 경우에 롤 토토 시스템의 추가 명령은 명령의 영향을 받는 행 수와 다소 독립적입니다.
요약하자면, 롤 토토의 작업으로 인해 크고 자격이 부족한 조인이 발생하는 경우(플래너가 실패하는 상황) 롤 토토은 트리거보다 상당히 느려질 것입니다.