트리거를 사용하여 수행 할 수있는 많은 것들이 를 사용하여 구현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;적절한 지수 설정이 있으므로 Optimizer가 있습니다 계획 만들기
NestLoop - 컴퓨터에서 comp_hostidx를 사용한 색인 스캔 - 소프트웨어에서 soft_hostidx를 사용한 색인 스캔따라서 속도에는 그다지 차이가 없습니다. 트리거 및 규칙 구현. 다음 삭제와 함께 호스트 이름이 시작되는 2000 대의 컴퓨터를 제거하고 싶습니다. 'old'와 함께. 그렇게 할 수있는 두 가지 가능한 쿼리가 있습니다. 하나는
hostName = 'old'인 컴퓨터에서 삭제 및 hostname < 'olo'토토 사이트 순위 쿼리 계획이 A
해시 조인 - 소프트웨어에서 SEQ 스캔 - 해시 - 컴퓨터에서 comp_hostidx를 사용한 색인 스캔다른 가능한 쿼리는 A입니다.
호스트 이름 ~ '^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, the 규칙 이벤트에 대한 속성 사양은 비활성화되었습니다 ( 6.5, 아마도 이전에 최신의 컴백입니다. 계속 지켜봐 주시기 바랍니다). 그래서 이제 shoelace_log 예제에서와 같이 규칙을 만드는 유일한 방법은 규칙 자격으로 수행합니다. 이로 인해 추가 쿼리가 발생합니다 관심 속성이 할 수없는 경우에도 모든 사람이 수행됩니다. 대상 목록에 나타나지 않기 때문에 전혀 변경됩니다. 초기 쿼리. 이것이 다시 활성화되면 하나 더가 될 것입니다. 트리거에 대한 규칙의 장점. 트리거의 최적화 이 경우 정의에 따라 실패 특정 속성이 업데이트 된 경우에만 수행됩니다. 기능입니다. 트리거의 정의는 만 허용됩니다 행 수준에서 지정하므로 행이 터치를 때마다 트리거가 결정을 내리려면 부름을 받아야합니다. 규칙 시스템은 그것을 알게 될 것입니다 TargetList를 찾아서 추가 쿼리를 억제함으로써 속성에 닿지 않은 경우 완전히. 따라서 규칙은 자격을 갖추 었습니다 아니면 그렇지 않으면, 무언가가있을 수 있다면 스캔 만 할 것입니다. 할 일.
토토 사이트 순위은 트리거보다 유의합니다. 행동이 크고 나쁜 자격을 갖춘 조인, 상황 인 상황이 발생합니다. 최적화가 실패합니다. 그들은 큰 망치입니다. 큰 망치를 사용합니다 주의를 기울이지 않으면 큰 손상이 발생할 수 있습니다. 그러나 권리와 함께 사용됩니다 만지면 머리에 못을 박을 수 있습니다.