| 범퍼카 토토 9.3.25 문서 | ||||
|---|---|---|---|---|
| PostgreSQL : 문서 : 9.3 : 와이즈 토토 및 명령 상태 | PostgreSQL : 문서 : 9.3 : 사설 토토 시스템 | 제38장. 범퍼카 토토 시스템 | 윈 토토 : 문서 : 9.3 : 절차 언어 | |
트리거를 사용하여 수행할 수 있는 많은 작업은 다음을 사용하여 구현되었습니다.범퍼카 토토범퍼카 토토 시스템. 범퍼카 토토으로 구현할 수 없는 것 중 하나 제약 조건, 특히 외래 키가 있습니다. 그것은 명령을 다시 작성하는 정규화된 범퍼카 토토을 배치할 수 있습니다.아무것도 없음열의 값이 일치하지 않는 경우 다른 테이블에 나타납니다. 하지만 그러면 데이터가 자동으로 버려집니다. 그건 좋은 생각이 아닙니다. 유효한 값을 확인하는 경우 필수이며 잘못된 값의 경우 오류 메시지가 표시됩니다. 생성되어야 하며 트리거에 의해 수행되어야 합니다.
이 장에서는 범퍼카 토토을 사용하여 보기를 업데이트하는 방법에 중점을 두었습니다. 모두 이 장의 업데이트 범퍼카 토토 예 중 일부도 구현할 수 있습니다. 사용 중대신뷰를 트리거합니다. 이러한 트리거를 작성하는 것이 범퍼카 토토을 작성하는 것보다 쉬운 경우가 많습니다. 특히 작업을 수행하는 데 복잡한 논리가 필요한 경우 업데이트합니다.
두 가지 모두에 의해 구현될 수 있는 것 중 가장 좋은 것은 데이터베이스 사용량에 따라 다릅니다. 트리거는 한 번만 실행됩니다. 영향을 받는 각 행. 규칙은 쿼리를 수정하거나 추가 쿼리. 따라서 하나의 명령문에서 많은 행이 영향을 받는 경우 하나의 추가 명령을 실행하는 규칙은 모든 단일 행에 대해 호출되고 다시 결정되어야 하는 트리거 여러번 해야 할 일. 그러나 트리거 접근 방식은 다음과 같습니다. 개념적으로 규칙 접근 방식보다 훨씬 간단하며 초보자가 바로잡을 수 있습니다.
여기서 우리는 범퍼카 토토 선택과 범퍼카 토토 선택이 어떻게 다른지에 대한 예를 보여줍니다. 트리거는 한 상황에서 실행됩니다. 두 개의 테이블이 있습니다:
테이블 컴퓨터 생성(
호스트 이름 텍스트, -- 색인화됨
제조업체 텍스트 - 색인화됨
);
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를 사용한 인덱스 스캔
이것은 기획자가 다음을 인식하지 못한다는 것을 보여줍니다. 자격호스트 이름in컴퓨터색인에도 사용할 수 있습니다. 계속 스캔하세요소프트웨어여러 개가 있는 경우 와 결합된 한정식그리고, 이는 정규식에서 수행되는 작업입니다. 명령의 버전입니다. 트리거는 각각에 대해 한 번씩 호출됩니다. 삭제해야 할 오래된 컴퓨터 2000대 중 한 번의 인덱스 스캔이 발생합니다.컴퓨터그리고 2000개 이상의 인덱스 스캔소프트웨어. 규칙 구현에서는 인덱스를 사용하는 두 개의 명령을 사용하여 이를 수행합니다. 그리고 테이블의 전체 크기에 따라 다릅니다.소프트웨어범퍼카 토토이 여전히 더 빠른지 여부 순차 스캔 상황. 2000번의 명령 실행 SPI 관리자를 통해 트리거하는 데 시간이 좀 걸립니다. 모든 인덱스가 블록은 곧 캐시에 저장될 것입니다.
우리가 보는 마지막 명령은 다음과 같습니다:
제조업체 = 'bim'인 컴퓨터에서 삭제;
또한 이로 인해 많은 행이 삭제될 수 있습니다.컴퓨터. 그러면 트리거가 다시 실행됩니다. 실행자를 통한 많은 명령. 에 의해 생성된 명령 규칙은 다음과 같습니다:
computer.manufacturer = 'bim'인 소프트웨어에서 삭제
AND 소프트웨어.호스트 이름 = 컴퓨터.호스트 이름;
그 명령에 대한 계획은 다시 두 개의 중첩된 루프가 될 것입니다 인덱스 스캔, 다른 인덱스만 사용컴퓨터:
네스트루프 - 컴퓨터에서 comp_manufidx를 사용하여 인덱스 스캔 - 소프트웨어에서 Soft_hostidx를 사용한 인덱스 스캔
이러한 경우에는 범퍼카 토토 시스템의 추가 명령이 영향을 받는 행 수와 다소 독립적입니다. 명령으로.
요약하자면, 규칙은 다음보다 상당히 느려질 것입니다. 그들의 행동으로 인해 규모가 크고 자격이 부족한 경우 트리거됩니다. 조인, 플래너가 실패하는 상황.
| 이전 | 배트맨 토토 : 문서 : 9.3 : 배트맨 토토 9.3.25 문서화 | 윈 토토 : 문서 : 9.3 : 절차 언어 |
| 범퍼카 토토 및 명령 상태 | PostgreSQL : 문서 : 9.3 : 사설 토토 시스템 | 절차적 언어 |