theIntagg
모듈은 정수 집계 자와 열거자를 제공합니다.Intagg
는 기능의 대체 세트를 제공하는 내장 기능이 있기 때문에 이제는 더 이상 사용되지 않습니다. 그러나 모듈은 여전히 내장 기능 주변의 호환 래퍼로 제공됩니다.
어그리 게이터는 골재 기능입니다int_array_aggregate (Integer)
공급 된 정수를 포함하는 정수 배열을 생성합니다. 이것은 주위의 포장지입니다array_agg
, 모든 배열 유형에 대해 동일한 작업을 수행합니다.
열거자는 함수입니다int_array_enum (integer [])
반환정수 세트
. 그것은 본질적으로 애그리 게이터의 역 작동입니다. 정수 배열이 주어지면 행 세트로 확장하십시오.Unnest
, 모든 배열 유형에 대해 동일한 작업을 수행합니다.
많은 데이터베이스 시스템에는 1 ~ 많은 테이블이라는 개념이 있습니다. 이러한 테이블은 일반적으로 두 개의 인덱스 테이블 사이에 있습니다. 예 :
테이블 생성 왼쪽 (ID int 기본 키, ...);
일반적으로 다음과 같이 사용됩니다.
오른쪽에서 선택하십시오.항목
;
왼손 테이블의 항목을 위해 오른쪽 테이블의 모든 항목을 반환합니다. 이것은 SQL에서 매우 일반적인 구조입니다.
이제,이 방법론은 매우 많은 수의 항목으로 번거 롭을 수 있습니다ONE_TO_MANY
테이블. 종종, 이와 같은 조인은 특정 왼손 입력에 대한 테이블의 각 오른손 항목에 대한 인덱스 스캔과 페치를 초래할 수 있습니다.
테이블 요약을 작성하십시오
이것은 왼쪽 항목 당 하나의 행과 오른쪽 항목 배열이있는 테이블을 만듭니다. 이제 이것은 어레이를 사용하는 방법 없이는 꽤 쓸모가 없습니다.
왼쪽 선택, int_array_enum (오른쪽) 요약 왼쪽 =항목
;
위의 쿼리 사용int_array_enum
와 동일한 결과를 생성합니다
One_TO_MANY에서 왼쪽을 선택하십시오.항목
;
차이점은 요약 테이블에 대한 쿼리가 테이블에서 한 행만 가져와야하는 반면, 직접 쿼리는입니다.ONE_TO_MANY
각 항목에 대해 인덱스 스캔하고 행을 가져와야합니다.
하나의 시스템에서 an설명
8488의 비용으로 쿼리가 329의 비용으로 감소한 것으로 나타났습니다. 원래 쿼리는와 관련된 조인이었습니다.ONE_TO_MANY
테이블, 다음으로 대체되었습니다.
오른쪽을 선택하고, 카운트 (오른쪽)항목
) 리프트로