Postgresql 9.3.25 문서 | ||||
---|---|---|---|---|
이전 | PostgreSQL : 문서 : 9.3 : 추가 제공 배트맨 토토 | 부록 F. 추가 제공된 모듈 | 다음 |
theintarray모듈은 숫자를 제공합니다 널리없는 배열 조작을위한 유용한 기능 및 연산자 정수의. 일부를 사용하여 인덱스 검색을 지원합니다 운영자의.
제공된 토토이 있으면 이러한 모든 작업에 오류가 발생합니다. 널 요소가 포함되어 있습니다.
이러한 작업 중 다수는 1 차원에만 합리적입니다 토토. 더 많은 치수의 입력 토토을 수락하지만 데이터는 스토리지의 선형 토토 인 것처럼 취급됩니다. 주문하다.
intarray모듈이 표시됩니다표 F-10, 연산자 안에표 F-11.
테이블 F-10.intarray기능
function | 반환 유형 | 설명 | example | 결과 |
---|---|---|---|---|
iCount (int []) |
int | 토토의 요소 수 | iCount ( '1,2,3':: int []) | 3 |
sort (int [], text dir) |
int [] | 정렬 토토 -dirASC또는desc | sort ( '1,2,3':: int [], 'desc') | 3,2,1 |
sort (int []) |
int [] | 오름차순 순서로 정렬 | sort (토토 [11,77,44]) | 11,44,77 |
sort_asc (int []) |
int [] | 오름차순 순서로 정렬 | ||
Sort_desc (int []) |
int [] | 내림차순으로 정렬 | ||
uniq (int []) |
int [] | 인접한 복제 제거 | uniq (sort ( '1,2,3,2,1':: int []) | 1,2,3 |
idx (int [], int item) |
int | 첫 번째 요소 일치의 색인항목(0이면 0) | idx (토토 [11,22,33,22,11], 22) | 2 |
subarray (int [], int start, int
렌) |
int [] | 위치에서 시작하는 토토 부분시작, Len요소 | 서브 어레이 ( '1,2,3,2,1':: int [], 2, 3) | 2,3,2 |
서브 어레이 (int [], int start) |
int [] | 위치에서 시작하는 토토 부분시작 | 서브 어레이 ( '1,2,3,2,1':: int [], 2) | 2,3,2,1 |
intset (int) |
int [] | 단일 요소 배열 만들기 | intset (42) | 42 |
표 F-11.intarray운영자
운영자 | 반환 | 설명 |
---|---|---|
int [] && int [] | 부울 | 오버랩 -true배열이 적어도 존재하는 경우 하나의 일반적인 요소 |
int [] @ int [] | 부울 | 포함 -true왼쪽 토토에 포함 된 경우 오른쪽 토토 |
int [] <@ int [] | 부울 | 포함 -true왼쪽 토토 인 경우 오른쪽 토토에 포함 |
# int [] | int | 토토의 요소 수 |
int [] # int | int | 색인 (동일idx 기능) |
int [] + int | int [] | 배열에 요소를 푸시합니다 (배열 끝에 추가) |
int [] + int [] | int [] | 토토 연결 (오른쪽 토토이 왼쪽 끝에 추가 하나) |
int [] - int | int [] | 배열에서 오른쪽 인수 일치하는 항목 제거 |
int [] - int [] | int [] | 왼쪽에서 오른쪽 배열의 요소 제거 |
int [] | int | int [] | 논쟁의 연합 |
int [] | int [] | int [] | 어레이의 연합 |
int [] & int [] | int [] | 토토 교차점 |
int [] @@ query_int | 부울 | true토토이 쿼리를 만족시키는 경우 (참조 아래에) |
query_int ~~ int [] | 부울 | true토토이 쿼리를 만족시키는 경우 (의 정류자@@) |
(Postgresql 8.2 이전, 격리 연산자@and<@각각 호출@and~. 이 이름은 여전히 사용 가능하지만 그렇습니다 감가 상각되고 결국 은퇴 할 것이다. 노인을 주목하십시오 이름은 이전에 컨벤션에서 반전 된 후 핵심 기하학적 데이터 유형!)
연산자&&, @and<@are 동등한PostgreSQL's 동일한 이름의 내장 운영자는 널이 포함되어 있지 않은 정수 배열, 내장형 연산자는 모든 배열 유형에 대해 작동합니다. 이 제한은 그것들을 만듭니다 많은 경우에 내장 운영자보다 빠릅니다.
the@@and~~운영자는 배열이 a를 충족하는지 테스트합니다.쿼리전문 데이터 유형query_int. 에이쿼리확인 된 정수 값으로 구성됩니다 배열의 요소에 대해 연산자&(및),|(또는) 및!(아님). 괄호는 필요에 따라 사용할 수 있습니다. 예를 들어, 쿼리1 & (2 | 3)1이 포함 된 배열 일치 또한 2 또는 3을 포함합니다.
intarray인덱스 지원을 제공합니다 그만큼&&, @, <@및@@운영자 및 일반 배열 평등.
두 개의 요점 인덱스 연산자 클래스가 제공됩니다 :gist__int_ops(기본적으로 사용)는 적합합니다 중소형 데이터 세트,gist__intbig_ops더 큰 서명을 사용하고 더 많습니다 큰 데이터 세트 (즉, 다수의 별개의 토토 값). 구현은 an을 사용합니다 LOSSY 압축 내장 된 RD-Tree 데이터 구조.
비 디폴트 진 운영자 클래스도 있습니다gin__int_ops동일한 연산자 지원.
GIST와 GIN 인덱싱 사이의 선택은 상대에 따라 다릅니다. 논의 된 GIST 및 GIN의 성능 특성 다른 곳. 경험상, 진 지수는 검색이 더 빠릅니다. 요지 지수이지만 구축 또는 업데이트가 느리게 진행됩니다. 그래서 진이 낫습니다 정적 데이터 및 종종 업데이트 된 데이터에 대한 GIST에 적합합니다.
- 메시지는 하나 이상일 수 있습니다"섹션"테이블 메시지 작성 (Mid int 기본 키, 섹션 int [], ...);
- 특수 인덱스를 만듭니다
GIST를 사용하여 메시지에서 색인 Message_rdTree_idx를 작성하십시오 (GIST__INT_OPS 섹션);
- 섹션 1 또는 2에서 메시지 선택 - 연산자 중첩
Message.Sections && '1,2';
- 섹션 1 및 2에서 메시지 선택 - 운영자가 포함됩니다.
message.sections.sections @ '1,2';
- 쿼리 연산자를 사용하여 동일합니다
Message.sections.sections.sections.sections.sections.sections.sections.mid를 선택하십시오.
소스 디렉토리Contrib/Intarray/Bench벤치 마크 테스트를 포함합니다 모음곡. 달리기 :
CD .../벤치 생성 된 테스트 psql test <../_int.sql ./create_test.pl | PSQL 테스트 ./Bench.pl
theBench.pl스크립트에는 많습니다 옵션은 아무것도없이 실행될 때 표시되는 옵션 논쟁.
모든 작업은 Teodor Sigaev (에 의해 수행되었습니다.<reodor@sigaev.ru
) 및 올레그
Bartunov (<oleg@sai.msu.su
). 보다http : //www.sai.msu.su/~megera/postgres/gist/추가 정보. Andrey Oktyabrski는 훌륭한 일을했습니다
새로운 기능 및 운영 추가.