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

17.5. 스포츠 토토 대 트리거

스포츠 토토를 사용하여 수행 할 수있는 많은 것들도 를 사용하여 구현Postgres스포츠 토토 시스템. 현재 스포츠 토토에 따라 구현할 수없는 것은입니다 어떤 종류의 제약. 자격을 갖춘 것을 배치 할 수 있습니다 열의 값이라면 쿼리를 다시 작성하는 스포츠 토토 다른 테이블에는 나타나지 않습니다. 그러나 데이터는 조용합니다 버려졌고 그것은 좋은 생각이 아닙니다. 유효한 점검이있는 경우 값이 필요하며 잘못된 값의 경우 오류가 발생합니다. 메시지를 생성해야하며, 트리거로 수행해야합니다. 지금.

반면에 삽입에 삽입 된 트리거 스포츠 토토과 동일한 작업을 수행하고 다른 곳에 데이터를 넣고 보기에서 인서트를 억제하십시오. 그러나 그것은 같은 일을 할 수 없습니다 뷰에 실제 데이터가 없기 때문에 업데이트 또는 삭제시 스캔 할 수있는 관계이므로 트리거는 결코 전화하십시오. 스포츠 토토 만 도움이 될 것입니다.

둘 다 구현할 수있는 것들에 대해서는 데이터베이스 사용이 가장 좋습니다. 방아쇠가 발사됩니다 한 번에 영향을받는 행의 경우. 스포츠 토토은 파 세트를 조작합니다 추가를 생성합니다. 따라서 많은 행이 하나에 영향을받는 경우 진술, 추가 쿼리를 발행하는 스포츠 토토은 일반적으로 단일 행을 요구하는 방아쇠보다 더 나은 직업과 이 일을 여러 번 실행해야합니다.

예 : 두 개의 테이블이 있습니다

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

    테이블 소프트웨어 생성 (
        소프트웨어 텍스트 - 색인
        hostname 텍스트 - 인덱스
    );
두 테이블 모두 수천 개의 행과 색인이 있습니다. 호스트 이름은 고유합니다. 호스트 이름 열에는 전체 자격이 있습니다 컴퓨터의 도메인 이름. 스포츠 토토/트리거는 제한해야합니다 삭제 된 호스트를 참조하는 소프트웨어에서 행을 삭제하십시오. 부터 트리거는 삭제 된 각 개별 행마다 호출됩니다. 컴퓨터, 진술을 사용할 수 있습니다
HostName = $ 1; 소프트웨어에서 삭제
준비 및 저장된 계획에서 호스트 이름을 매개 변수. 스포츠 토토은로 작성됩니다.
컴퓨터로 삭제대로 Computer_del을 작성하십시오
        HostName = Old.HostName; 인 소프트웨어에서 삭제하십시오.
이제 다른 유형의 삭제를 살펴 봅니다. A의 경우
hostName = 'mypc.local.net'; computer에서 삭제
테이블 컴퓨터는 인덱스 (빠른)와 쿼리로 스캔됩니다. 트리거가 발행 한 것은 인덱스 스캔도 있습니다 (빠른). 그만큼 스포츠 토토의 추가 쿼리는 A입니다.
Computer.HostName = 'mypc.local.net'소프트웨어에서 삭제
                           및 Software.HostName = Computer.HostName;
적절한 지수 설정이 있으므로 플래너는 그렇습니다 계획 만들기
NestLoop
      - 컴퓨터에서 comp_hostidx를 사용한 색인 스캔
      - 소프트웨어에서 soft_hostidx를 사용한 색인 스캔
따라서 속도에는 그다지 큰 차이가 없을 것입니다. 트리거 및 스포츠 토토 구현. 다음 삭제와 함께 호스트 이름이 시작되는 2000 대의 컴퓨터를 제거하고 싶습니다. 'old'와 함께. 그렇게 할 수있는 두 가지 가능한 쿼리가 있습니다. 하나는
hostName = 'old'인 컴퓨터에서 삭제
                           및 hostname < 'olo'
스포츠 토토 쿼리 계획이 A
해시 조인
      - 소프트웨어에서 SEQ 스캔
      - 해시
            - 컴퓨터에서 comp_hostidx를 사용한 색인 스캔
다른 가능한 쿼리는 A입니다.
HostName ~ '^Old';이있는 컴퓨터에서 삭제
실행 계획과 함께
NestLoop
      - 컴퓨터에서 comp_hostidx를 사용한 색인 스캔
      - 소프트웨어에서 soft_hostidx를 사용한 색인 스캔
이것은 플래너가 컴퓨터의 호스트 이름에 대한 자격도 여러 자격이있을 때 소프트웨어에 대한 인덱스 스캔 REGEXP 버전에서 수행 한 표현식 및 그가하는 일 쿼리의. 2000 년 중 하나에 대해 트리거가 한 번 호출됩니다. 삭제 해야하는 오래된 컴퓨터와 컴퓨터에 대한 인덱스 스캔 및 소프트웨어의 2000 인덱스 스캔. 그만큼 스포츠 토토 구현은 지수에 대한 두 가지 쿼리로 수행됩니다. 그리고 스포츠 토토 인 경우 소프트웨어 테이블의 전체 크기에 따라 다릅니다. Seqscan 상황에서는 여전히 더 빠릅니다. 2000 쿼리 SPI 관리자를 통한 실행은 검색 할 인덱스 블록이 곧 캐시에 나타납니다.

우리가 보는 마지막 쿼리는 A입니다.

manufacurer = 'bim'; 여기서 컴퓨터에서 삭제
다시 많은 행이 삭제 될 수 있습니다. 컴퓨터. 그래서 트리거는 다시 많은 쿼리를 발사합니다. 집행자. 그러나 스포츠 토토 계획은 다시 두 개 이상의 Nestloop가 될 것입니다. 인덱스 스캔. 컴퓨터에서 다른 색인 만 사용 :
NestLoop
      - 컴퓨터에서 comp_manufidx를 사용한 색인 스캔
      - 소프트웨어에서 soft_hostidx를 사용한 색인 스캔
스포츠 토토 쿼리에서 결과
Computer.Manufacurer = 'bim'인 소프트웨어에서 삭제
                           및 Software.HostName = Computer.HostName;
이 경우 스포츠 토토 시스템의 추가 쿼리 영향을받는 행의 수와는 다소 독립적입니다. 쿼리에서.

또 다른 상황은 업데이트의 사례입니다. 조치를 수행 해야하는 경우 속성 변경. 안에Postgres버전 6.4, 규칙 이벤트에 대한 속성 사양은 비활성화되었습니다 ( 6.5, 아마도 이전에 최신의 컴백 - 계속 지켜봐 주시기 바랍니다). 그래서 이제 shoelace_log 예제에서와 같이 규칙을 작성하는 유일한 방법 규칙 자격으로 수행하는 것입니다. 그 결과 여분이 발생합니다 관심 속성이라도 항상 수행되는 쿼리 TargetList에 나타나지 않기 때문에 전혀 변경할 수 없습니다. 초기 쿼리의. 이것이 다시 활성화되면 하나가 될 것입니다 트리거에 대한 규칙의 더 많은 장점. 트리거의 최적화 이 경우에는 정의에 따라 실패해야합니다. 작업은 특정 속성이 업데이트 된 경우에만 수행됩니다. 기능이 숨겨져 있습니다. 트리거 만 정의합니다 행 수준에 지정할 수 있으므로 행이 터치 될 때마다 결정을 내리려면 방아쇠를 호출해야합니다. 규칙 시스템 대상 목록을 찾아서 알게되며 속성이 터치되지 않으면 추가 쿼리를 완전히합니다. 그래서 자격을 갖춘 규칙은 그 어느 때에도 스캔을 할 것입니다. 할 수있는 일이 될 수 있습니다.

스포츠 토토은 트리거보다 훨씬 느리게됩니다. 행동은 크고 나쁜 자격을 갖춘 조인, 상황을 초래합니다. 플래너가 실패하는 곳. 그들은 큰 망치입니다. 큰 사용 주의없이 망치는 큰 손상을 일으킬 수 있습니다. 그러나 오른쪽 터치, 그들은 머리에 못을 박을 수 있습니다.