브린블록 범위 인덱스의 약자.브린는 특정 열이 테이블 내에서 물리적 위치와 자연적인 상관 관계를 갖는 매우 큰 테이블을 처리하도록 설계되었습니다.
브린작업블록 범위(또는“페이지 범위”). 블록 범위는 테이블에 물리적으로 인접한 페이지 그룹입니다.
브린인덱스는 일반 비트 맵 인덱스 스캔을 통해 쿼리를 만족시킬 수 있으며 인덱스에 의해 저장된 요약 정보가이면 각 범위 내의 모든 페이지의 모든 튜플을 반환합니다.일관성쿼리 조건과 함께. 쿼리 executor는 이러한 튜플을 다시 확인하고 쿼리 조건과 일치하지 않는 튜플을 폐기하는 것을 담당합니다. 즉, 이러한 색인은 손실됩니다.브린색인이 매우 작으며, 인덱스를 스캔하면 순차적 스캔에 비해 오버 헤드가 거의 추가되지만 일치하는 튜플이 포함되지 않은 것으로 알려진 테이블의 많은 부분을 스캔하지 않을 수 있습니다.
a 특정 데이터브린index는 저장할 것입니다. 그리고 인덱스가 만족할 수있는 특정 쿼리는 인덱스의 각 열에 대해 선택한 연산자 클래스에 따라 다릅니다. 선형 정렬 순서가있는 데이터 유형에는 각 블록 범위 내에 최소 및 최대 값을 저장하는 토토 캔 클래스가있을 수 있습니다.
블록 범위의 크기는 인덱스 생성 시간에 따라 결정됩니다.pages_per_range
스토리지 매개 변수. 인덱스 항목의 수는 페이지의 관계 크기와 동일합니다.pages_per_range
. 따라서 숫자가 작을수록 더 많은 인덱스 항목을 저장해야하기 때문에 인덱스가 커지지만, 저장된 요약 데이터는 더 정확하고 인덱스 스캔 중에 더 많은 데이터 블록을 건너 뛸 수 있습니다..
생성시 기존의 모든 힙 페이지가 스캔되고 요약 인덱스 튜플이 끝에 불완전한 범위를 포함하여 각 범위에 대해 생성됩니다. 새 페이지가 데이터로 채워짐에 따라 이미 요약 된 페이지 범위는 요약 정보가 새 튜플의 데이터로 업데이트됩니다.
페이지 범위의 초기 요약을 트리거하는 몇 가지 방법이 있습니다. 테이블이 수동으로 또는 진공 청소기가 진공 청소기 인 경우autovacuum, 기존의 모든 미정화되지 않은 페이지 범위가 요약되어 있습니다. 또한 색인이AutosumMarize매개 변수가 활성화되어 있습니다. 기본적으로 AutoVacuum이 해당 데이터베이스에서 실행될 때마다 테이블 자체가 AutoVacuum에 의해 처리되는지 여부에 관계없이 채워진 모든 숫자없는 페이지 범위에 대해 요약이 발생합니다. 아래를 참조하십시오.
마지막으로 다음 기능을 사용할 수 있습니다 (이러한 함수는 실행되는 동안search_path일시적으로 변경PG_CATALOG, PG_TEMP
) :
brin_summarize_new_values (regclass) 모든 무관심 범위를 요약 한 것; |
brin_summarize_range (regclass, bigint) 주어진 페이지가 포함 된 범위 만 요약 한 경우, 숫자가 없어지는 경우 |
자가 점수화가 활성화되면 요청이 전송됩니다autovacuum
다음 블록 범위의 첫 번째 페이지의 첫 번째 항목에 대한 삽입이 감지 될 때 블록 범위에 대한 대상 요약을 실행하려면 다음에 Autovacuum 작업자가 동일한 데이터베이스에서 실행될 때 충족 될 때. 요청 큐가 가득 찬 경우 요청이 기록되지 않고 메시지가 서버 로그로 전송됩니다 :
로그 : 인덱스에 대한 브린 범위 요약 요청 "Brin_Wi_idx"페이지 128이 기록되지 않았습니다
이런 일이 발생하면 테이블에서 다음 정기 진공 실행이 발생하거나 위에서 언급 한 함수 중 하나가 호출 될 때까지 범위가 무관하게 유지됩니다..
반대로, 범위는를 사용하여 제거 할 수 있습니다brin_desummarize_range (regclass, bigint)
함수, 이는 기존 값이 변경 되었기 때문에 인덱스 튜플이 더 이상 좋은 표현이 아닌 경우에 유용합니다. 보다섹션 9.28.8자세한 내용.
핵심PostgreSQL분포 포함브린토토 캔 클래스에 표시표 64.4.
theminmax토토 캔 클래스 범위 내에서 인덱스 된 열에 나타나는 최소값과 최대 값을 저장합니다. 그만큼포함토토 캔 클래스 범위 내에서 인덱스 된 열에 값이 포함 된 값을 저장합니다. 그만큼블룸토토 캔 클래스 범위의 모든 값에 대한 블룸 필터를 작성합니다. 그만큼Minmax-Multi토토 캔 클래스는 여러 최소 및 최대 값을 저장합니다.
표 64.4. 내장브린토토 캔 클래스
이름 | 인덱스 가능한 연산자 |
---|---|
bit_minmax_ops |
= (비트, 비트) |
<(비트, 비트) |
|
> (비트, 비트) |
|
<= (비트, 비트) |
|
> = (비트, 비트) |
|
box_inclusion_ops |
@> (box, point) |
<< (Box, Box) |
|
& <(Box, Box) |
|
&> (Box, Box) |
|
>> (Box, Box) |
|
<@ (box, box) |
|
@> (Box, Box) |
|
~ = (Box, Box) |
|
&& (Box, Box) |
|
<< | (상자, 상자) |
|
& <| (상자, 상자) |
|
| &> (Box, Box) |
|
| >> (상자, 상자) |
|
BPCHAR_BLOOM_OPS |
= (캐릭터, 문자) |
BPCHAR_MINMAX_OPS |
= (캐릭터, 문자) |
<(캐릭터, 문자) |
|
<= (캐릭터, 문자) |
|
> (캐릭터, 문자) |
|
> = (캐릭터, 문자) |
|
bytea_bloom_ops |
= (bytea, bytea) |
bytea_minmax_ops |
= (bytea, bytea) |
<(bytea, bytea) |
|
<= (bytea, bytea) |
|
> (bytea, bytea) |
|
> = (bytea, bytea) |
|
char_bloom_ops |
= ( "char", "char") |
char_minmax_ops |
= ( "char", "char") |
<( "char", "char") |
|
<= ( "char", "char") |
|
> ( "char", "char") |
|
> = ( "char", "char") |
|
date_bloom_ops |
= (날짜, 날짜) |
date_minmax_ops |
= (날짜, 날짜) |
<(날짜, 날짜) |
|
<= (날짜, 날짜) |
|
> (날짜, 날짜) |
|
> = (날짜, 날짜) |
|
date_minmax_multi_ops |
= (날짜, 날짜) |
<(날짜, 날짜) |
|
<= (날짜, 날짜) |
|
> (날짜, 날짜) |
|
> = (날짜, 날짜) |
|
float4_bloom_ops |
= (float4, float4) |
float4_minmax_ops |
= (float4, float4) |
<(float4, float4) |
|
> (float4, float4) |
|
<= (float4, float4) |
|
> = (float4, float4) |
|
float4_minmax_multi_ops |
= (float4, float4) |
<(float4, float4) |
|
> (float4, float4) |
|
<= (float4, float4) |
|
> = (float4, float4) |
|
float8_bloom_ops |
= (float8, float8) |
float8_minmax_ops |
= (float8, float8) |
<(float8, float8) |
|
<= (float8, float8) |
|
> (float8, float8) |
|
> = (float8, float8) |
|
float8_minmax_multi_ops |
= (float8, float8) |
<(float8, float8) |
|
<= (float8, float8) |
|
> (float8, float8) |
|
> = (float8, float8) |
|
inet_inclusion_ops |
<< (inet, inet) |
<< = (inet, inet) |
|
>> (inet, inet) |
|
>> = (inet, inet) |
|
= (inet, inet) |
|
&& (inet, inet) |
|
inet_bloom_ops |
= (inet, inet) |
inet_minmax_ops |
= (inet, inet) |
<(inet, inet) |
|
<= (inet, inet) |
|
> (inet, inet) |
|
> = (inet, inet) |
|
inet_minmax_multi_ops |
= (inet, inet) |
<(inet, inet) |
|
<= (inet, inet) |
|
> (inet, inet) |
|
> = (inet, inet) |
|
int2_bloom_ops |
= (int2, int2) |
int2_minmax_ops |
= (int2, int2) |
<(int2, int2) |
|
> (int2, int2) |
|
<= (int2, int2) |
|
> = (int2, int2) |
|
int2_minmax_multi_ops |
= (int2, int2) |
<(int2, int2) |
|
> (int2, int2) |
|
<= (int2, int2) |
|
> = (int2, int2) |
|
int4_bloom_ops |
= (int4, int4) |
int4_minmax_ops |
= (int4, int4) |
<(int4, int4) |
|
> (int4, int4) |
|
<= (int4, int4) |
|
> = (int4, int4) |
|
int4_minmax_multi_ops |
= (int4, int4) |
<(int4, int4) |
|
> (int4, int4) |
|
<= (int4, int4) |
|
> = (int4, int4) |
|
int8_bloom_ops |
= (bigint, bigint) |
int8_minmax_ops |
= (bigint, bigint) |
<(bigint, bigint) |
|
> (bigint, bigint) |
|
<= (bigint, bigint) |
|
> = (bigint, bigint) |
|
int8_minmax_multi_ops |
= (bigint, bigint) |
<(bigint, bigint) |
|
> (bigint, bigint) |
|
<= (bigint, bigint) |
|
> = (bigint, bigint) |
|
interval_bloom_ops |
= (간격, 간격) |
interval_minmax_ops |
= (간격, 간격) |
<(간격, 간격) |
|
<= (간격, 간격) |
|
> (간격, 간격) |
|
> = (간격, 간격) |
|
interval_minmax_multi_ops |
= (간격, 간격) |
<(간격, 간격) |
|
<= (간격, 간격) |
|
> (간격, 간격) |
|
> = (간격, 간격) |
|
MacAddr_bloom_ops |
= (MacAddr, MacAddr) |
macAddr_minmax_ops |
= (MacAddr, MacAddr) |
<(MacAddr, MacAddr) |
|
<= (MacAddr, MacAddr) |
|
> (MacAddr, MacAddr) |
|
> = (MacAddr, MacAddr) |
|
macAddr_minmax_multi_ops |
= (MacAddr, MacAddr) |
<(MacAddr, MacAddr) |
|
<= (MacAddr, MacAddr) |
|
> (MacAddr, MacAddr) |
|
> = (MacAddr, MacAddr) |
|
MacAddr8_bloom_ops |
= (MacAddr8, MacAddr8) |
MacAddr8_minmax_ops |
= (MacAddr8, MacAddr8) |
<(MacAddr8, MacAddr8) |
|
<= (MacAddr8, MacAddr8) |
|
> (MacAddr8, MacAddr8) |
|
> = (MacAddr8, MacAddr8) |
|
MacAddr8_minmax_multi_ops |
= (MacAddr8, MacAddr8) |
<(MacAddr8, MacAddr8) |
|
<= (MacAddr8, MacAddr8) |
|
> (MacAddr8, MacAddr8) |
|
> = (MacAddr8, MacAddr8) |
|
name_bloom_ops |
= (이름, 이름) |
name_minmax_ops |
= (이름, 이름) |
<(이름, 이름) |
|
<= (이름, 이름) |
|
> (이름, 이름) |
|
> = (이름, 이름) |
|
numeric_bloom_ops |
= (숫자, 숫자) |
numeric_minmax_ops |
= (숫자, 숫자) |
<(숫자, 숫자) |
|
<= (숫자, 숫자) |
|
> (숫자, 숫자) |
|
> = (숫자, 숫자) |
|
numeric_minmax_multi_ops |
= (숫자, 숫자) |
<(숫자, 숫자) |
|
<= (숫자, 숫자) |
|
> (숫자, 숫자) |
|
> = (숫자, 숫자) |
|
OID_BLOOM_OPS |
= (OID, OID) |
OID_MINMAX_OPS |
= (OID, OID) |
<(oid, oid) |
|
> (OID, OID) |
|
<= (OID, OID) |
|
> = (OID, OID) |
|
OID_MINMAX_MULTI_OPS |
= (OID, OID) |
<(oid, oid) |
|
> (OID, OID) |
|
<= (OID, OID) |
|
> = (OID, OID) |
|
PG_LSN_BLOOM_OPS |
= (PG_LSN, PG_LSN) |
PG_LSN_MINMAX_OPS |
= (PG_LSN, PG_LSN) |
<(pg_lsn, pg_lsn) |
|
> (PG_LSN, PG_LSN) |
|
<= (PG_LSN, PG_LSN) |
|
> = (PG_LSN, PG_LSN) |
|
PG_LSN_MINMAX_MULTI_OPS |
= (PG_LSN, PG_LSN) |
<(pg_lsn, pg_lsn) |
|
> (PG_LSN, PG_LSN) |
|
<= (PG_LSN, PG_LSN) |
|
> = (PG_LSN, PG_LSN) |
|
range_inclusion_ops |
= (AnyRange, AnyRange) |
<(AnyRange, AnyRange) |
|
<= (AnyRange, AnyRange) |
|
> = (AnyRange, AnyRange) |
|
> (AnyRange, AnyRange) |
|
&& (AnyRange, AnyRange) |
|
@> (AnyRange, Anylement) |
|
@> (AnyRange, AnyRange) |
|
<@ (AnyRange, AnyRange) |
|
<< (AnyRange, AnyRange) |
|
>> (AnyRange, AnyRange) |
|
& <(AnyRange, AnyRange) |
|
&> (AnyRange, AnyRange) |
|
- |- (AnyRange, AnyRange) |
|
text_bloom_ops |
= (텍스트, 텍스트) |
text_minmax_ops |
= (텍스트, 텍스트) |
<(텍스트, 텍스트) |
|
<= (텍스트, 텍스트) |
|
> (텍스트, 텍스트) |
|
> = (텍스트, 텍스트) |
|
TID_BLOOM_OPS |
= (tid, tid) |
TID_MINMAX_OPS |
= (tid, tid) |
<(tid, tid) |
|
> (tid, tid) |
|
<= (tid, tid) |
|
> = (tid, tid) |
|
TID_MINMAX_MULTI_OPS |
= (tid, tid) |
<(tid, tid) |
|
> (tid, tid) |
|
<= (tid, tid) |
|
> = (tid, tid) |
|
Timestamp_bloom_ops |
= (타임 스탬프, 타임 스탬프) |
Timestamp_MinMax_OPS |
= (타임 스탬프, 타임 스탬프) |
<(타임 스탬프, 타임 스탬프) |
|
<= (타임 스탬프, 타임 스탬프) |
|
> (타임 스탬프, 타임 스탬프) |
|
> = (타임 스탬프, 타임 스탬프) |
|
TimesTamp_Minmax_multi_ops |
= (타임 스탬프, 타임 스탬프) |
<(타임 스탬프, 타임 스탬프) |
|
<= (타임 스탬프, 타임 스탬프) |
|
> (타임 스탬프, 타임 스탬프) |
|
> = (타임 스탬프, 타임 스탬프) |
|
Timestamptz_bloom_ops |
= (timestamptz, timestamptz) |
timestamptz_minmax_ops |
= (timestamptz, timestamptz) |
<(timestamptz, timestamptz) |
|
<= (timestamptz, timestamptz) |
|
> (timestamptz, timestamptz) |
|
> = (timestamptz, timestamptz) |
|
timestamptz_minmax_multi_ops |
= (timestamptz, timestamptz) |
<(timestamptz, timestamptz) |
|
<= (timestamptz, timestamptz) |
|
> (timestamptz, timestamptz) |
|
> = (timestamptz, timestamptz) |
|
time_bloom_ops |
= (시간, 시간) |
time_minmax_ops |
= (시간, 시간) |
<(시간, 시간) |
|
<= (시간, 시간) |
|
> (시간, 시간) |
|
> = (시간, 시간) |
|
time_minmax_multi_ops |
= (시간, 시간) |
<(시간, 시간) |
|
<= (시간, 시간) |
|
> (시간, 시간) |
|
> = (시간, 시간) |
|
TIMETZ_BLOOM_OPS |
= (Timetz, Timetz) |
timetz_minmax_ops |
= (Timetz, Timetz) |
<(Timetz, Timetz) |
|
<= (Timetz, Timetz) |
|
> (Timetz, Timetz) |
|
> = (Timetz, Timetz) |
|
timetz_minmax_multi_ops |
= (Timetz, Timetz) |
<(Timetz, Timetz) |
|
<= (Timetz, Timetz) |
|
> (Timetz, Timetz) |
|
> = (Timetz, Timetz) |
|
uuid_bloom_ops |
= (uuid, uuid) |
UUID_MINMAX_OPS |
= (uuid, uuid) |
<(uuid, uuid) |
|
> (uuid, uuid) |
|
<= (uuid, uuid) |
|
> = (uuid, uuid) |
|
UUID_MINMAX_MULTI_OPS |
= (uuid, uuid) |
<(uuid, uuid) |
|
> (uuid, uuid) |
|
<= (uuid, uuid) |
|
> = (uuid, uuid) |
|
varbit_minmax_ops |
= (Varbit, Varbit) |
<(Varbit, Varbit) |
|
> (Varbit, Varbit) |
|
<= (Varbit, Varbit) |
|
> = (Varbit, Varbit) |
일부 내장 연산자 클래스는 토토 캔 클래스의 동작에 영향을 미치는 매개 변수를 지정할 수 있습니다. 각 연산자 클래스에는 자체 허용 매개 변수 세트가 있습니다.블룸
andMinmax-Multi
토토 캔 클래스가 매개 변수 지정 허용 :
Bloom Operator Classs :
n_distinct_per_range
|브린블룸 필터 크기에 대한 블룸 인덱스. 그것은와 비슷하게 행동합니다.n_distinct
옵션Alter Table. 양수 값으로 설정되면 각 블록 범위는이 균등 한 널 널 값을 포함하는 것으로 가정됩니다.-0.1
, 그리고 고유 한 비 널 값의 최소 수는입니다.16
.
false_positive_rate
브린블룸 필터 크기에 대한 블룸 인덱스. 값은 0.0001에서 0.25 사이 여야합니다.
Minmax-Multi 연산자 클래스는 다음 매개 변수를 수락합니다.
values_per_range
|브린Minmax 인덱스는 블록 범위를 요약합니다. 각 값은 점 또는 간격의 경계를 나타낼 수 있습니다.
the브린인터페이스는 높은 수준의 추상화를 가지고있어 액세스 방법 구현자가 액세스하는 데이터 유형의 의미를 구현해야합니다. 그만큼브린레이어 자체는 동시성, 로깅 및 인덱스 구조 검색을 처리합니다.
a를 얻는 데 필요한 모든 것브린액세스 방법 작업은 몇 가지 사용자 정의 메소드를 구현하는 것입니다. 이는 인덱스에 저장된 요약 값의 동작과 스캔 키와 상호 작용하는 방식을 정의하는 몇 가지 사용자 정의 메소드를 구현하는 것입니다. 요컨대브린확장 성과 일반성, 코드 재사용 및 깨끗한 인터페이스를 결합합니다.
토토 캔가 클래스하는 4 가지 방법이브린제공해야합니다 :
brinopcinfo *opcinfo (Oid type_oid)
인덱스 된 열의 요약 데이터에 대한 내부 정보를 반환합니다. 반환 값은 palloc'd를 가리켜 야합니다Brinopcinfo
,이 정의가있는 다음 :
typedef struct brinopcinfo
Brinopcinfo
.oi_opaque
인덱스 스캔 중에 지원 기능간에 정보를 전달하기 위해 토토 캔 클래스 루틴에서 사용할 수 있습니다.
bool 일관성 (Brindesc *bdesc, brinvalues *열, 스캔 키 *키, int nkeys)
모든 스캔 키 항목이 범위에 대한 지정된 색인 값과 일치하는지 여부를 반환합니다. 사용할 속성 번호는 스캔 키의 일부로 전달됩니다.nkeys
매개 변수.
bool 일관성 (Brindesc *bdesc, brinValues *열, 스캔 키 키)
스캔 키가 범위에 대한 지정된 색인 값과 일치하는지 여부를 반환합니다. 사용할 속성 번호는 스캔 키의 일부로 전달됩니다.
bool addValue (brindesc *bdesc, brinvalues *열, Datum Newval, bool isnull)
인덱스 튜플과 인덱스 값이 주어지면 튜플의 표시된 속성을 수정하여 새 값을 추가로 나타냅니다. 튜플에 대한 수정이 완료되면true
반환됩니다.
Bool UnionTuples (Brindesc *bdesc, brinValues *a, brinValues *b)
2 개의 인덱스 튜플을 통합합니다. 두 개의 인덱스 튜플이 주어지면 두 튜플을 나타내도록 첫 번째의 표시된 속성을 수정합니다.
토토 캔 클래스브린선택적으로 다음 방법을 지정할 수 있습니다.
무효 옵션 (local_relopts *repopts)
토토 캔 클래스 동작을 제어하는 사용자가 가시 가능한 매개 변수 세트를 정의합니다.
the옵션
함수는 A로 포인터가 전달됩니다local_relopts
구조물은 일련의 토토 캔 클래스 특정 옵션으로 채워야합니다. 옵션은를 사용하여 다른 지원 기능에서 액세스 할 수 있습니다.pg_has_opclass_options ()
andpg_get_opclass_options ()
매크로.
인덱스 값의 키 추출과 키의 표현 이후브린융통성이 있고 사용자 지정 매개 변수에 의존 할 수 있습니다.
핵심 분포에는 Minmax, Minmax-Multi, Inclusion and Bloom의 4 가지 유형의 토토 캔 클래스에 대한 지원이 포함됩니다. 토토 캔 클래스 정의를 사용하는 클래스 정의는 코어 내 데이터 유형에 적절하게 배송됩니다.
완전히 다른 의미를 구현하는 토토 캔 클래스도 가능합니다. 위에서 설명한 4 가지 주요 지원 기능의 구현이 작성되었습니다. 주요 릴리스의 역 호환성은 보장되지 않습니다. 예를 들어, 후기 릴리스에서 추가 지원 기능이 필요할 수 있습니다.
완전히 주문한 세트를 구현하는 데이터 유형에 대한 연산자 클래스를 작성하려면 Minmax 지원 기능을 해당 연산자와 함께 사용할 수 있습니다.표 64.5. 모든 토토 캔 클래스 멤버 (기능 및 운영자)는 필수입니다.
표 64.5. Minmax 토토 캔 클래스의 기능 및 지원 번호
토토 캔 클래스 멤버 | 개체 |
---|---|
지원 기능 1 | 내부 기능brin_minmax_opcinfo () |
지원 기능 2 | 내부 기능brin_minmax_add_value () |
지원 기능 3 | 내부 기능brin_minmax_consistent () |
지원 기능 4 | 내부 기능brin_minmax_union () |
토토 캔 전략 1 | 토토 캔보다 |
토토 캔 전략 2 | 토토 캔는 덜 동일하지 않거나 |
토토 캔 전략 3 | 토토 캔 동등한 |
토토 캔 전략 4 | 토토 캔는 더 큰 것 또는 평등보다 |
토토 캔 전략 5 | 토토 캔보다 더 큰 |
다른 유형 내에 포함 된 값이 포함 된 복잡한 데이터 유형에 대한 연산자 클래스를 작성하려면, 포함 된 연산자와 함께 포함 지원 기능을 사용할 수 있습니다.표 64.6. 모든 언어로 작성할 수있는 단일 추가 기능 만 있으면됩니다.
표 64.6. 포함 작업자 클래스의 기능 및 지원 번호
토토 캔 클래스 멤버 | 개체 | 의존성 |
---|---|---|
지원 기능 1 | 내부 기능brin_inclusion_opcinfo () |
|
지원 기능 2 | 내부 기능brin_inclusion_add_value () |
|
지원 기능 3 | 내부 기능brin_inclusion_consistent () |
|
지원 기능 4 | 내부 기능brin_inclusion_union () |
|
지원 기능 11 | 두 요소를 병합하는 함수 | |
지원 기능 12 | 두 요소가 합병 가능 여부를 확인하는 선택적 함수 | |
지원 기능 13 | 요소가 다른 내에 포함되어 있는지 확인할 수있는 선택적 함수 | |
지원 기능 14 | 요소가 비어 있는지 확인하는 선택적 함수 | |
토토 캔 전략 1 | 토토 캔 왼쪽 | 토토 캔 전략 4 |
토토 캔 전략 2 | 운영자는 extend-to-the grong-of | 토토 캔 전략 5 |
토토 캔 전략 3 | 토토 캔 중첩 | |
토토 캔 전략 4 | 토토 캔는 leftend-to-left-of가 아닙니다. | 토토 캔 전략 1 |
토토 캔 전략 5 | 토토 캔 권리 | 토토 캔 전략 2 |
토토 캔 전략 6, 18 | 토토 캔 동일 또는 동일하게 | 토토 캔 전략 7 |
토토 캔 전략 7, 16, 24, 25 | 운영자가 포함되어 있거나 동등합니다 | |
토토 캔 전략 8, 26, 27 | 토토 캔는 동일하거나 동등한 것으로 나타납니다 | 토토 캔 전략 3 |
토토 캔 전략 9 | 토토 캔는 extend-above가 아닙니다 | 토토 캔 전략 11 |
토토 캔 전략 10 | 토토 캔 IS-BELOW | 토토 캔 전략 12 |
토토 캔 전략 11 | 토토 캔 IS-ABOVE | 토토 캔 전략 9 |
토토 캔 전략 12 | 토토 캔는 extend-below가 아닙니다 | 토토 캔 전략 10 |
토토 캔 전략 20 | 토토 캔보다 | 토토 캔 전략 5 |
토토 캔 전략 21 | 토토 캔는 덜 동일하지 않거나 | 토토 캔 전략 5 |
토토 캔 전략 22 | 토토 캔보다 더 큰 | 토토 캔 전략 1 |
토토 캔 전략 23 | 토토 캔는 더 큰 것 또는 평등보다 | 토토 캔 전략 1 |
지원 함수 번호 1 ~ 10은 브린 내부 함수에 대해 예약되어 있으므로 SQL 레벨 기능은 11 번으로 시작합니다. 지원 기능 번호 11은 인덱스를 구축하는 데 필요한 주요 기능입니다. 토토 캔 클래스와 동일한 데이터 유형을 가진 두 가지 인수를 수락하고 연합을 반환해야합니다.스토리지
매개 변수. 노조 기능의 반환 값은와 일치해야합니다.스토리지
데이터 유형.
지원 기능 번호 12 및 14는 내장 데이터 유형의 불규칙성을 지원하기 위해 제공됩니다. 기능 번호 12는 합병 할 수없는 다른 패밀리의 네트워크 주소를 지원하는 데 사용됩니다.
평등 연산자 만 구현하고 해싱을 지원하는 데이터 유형에 대한 연산자 클래스를 작성하려면 해당 연산자와 함께 블룸 지원 절차를 사용할 수 있습니다.표 64.7. 모든 토토 캔 클래스 멤버 (절차 및 운영자)는 필수입니다.
표 64.7. 블룸 토토 캔 클래스의 절차 및 지원 번호
토토 캔 클래스 멤버 | 개체 |
---|---|
지원 절차 1 | 내부 기능brin_bloom_opcinfo () |
지원 절차 2 | 내부 기능brin_bloom_add_value () |
지원 절차 3 | 내부 기능brin_bloom_consistent () |
지원 절차 4 | 내부 기능brin_bloom_union () |
지원 절차 5 | 내부 기능brin_bloom_options () |
지원 절차 11 | 요소의 해시를 계산하는 함수 |
토토 캔 전략 1 | 토토 캔 동등한 |
지원 절차 번호 1-10은 브린 내부 기능에 예약되어 있으므로 SQL 레벨 기능은 11 번으로 시작합니다. 지원 기능 번호 11은 인덱스를 빌드하는 데 필요한 주요 기능입니다. 연산자 클래스와 동일한 데이터 유형을 가진 하나의 인수를 수락하고 값의 해시를 반환해야합니다.
Minmax-Multi 토토 캔 클래스는 완전히 주문한 세트를 구현하는 데이터 유형을위한 것이며 Minmax 토토 캔 클래스의 간단한 확장으로 볼 수 있습니다. Minmax 토토 캔 클래스는 각 블록 범위의 값을 단일 연속 간격으로 요약하지만 Minmax-Multi는 여러 개의 작은 간격으로 요약하여 특이 치 값의 처리를 향상시킵니다.표 64.8. 모든 토토 캔 클래스 멤버 (절차 및 운영자)는 필수입니다.
표 64.8. Minmax-Multi 토토 캔 클래스의 절차 및 지원 번호
토토 캔 클래스 멤버 | 개체 |
---|---|
지원 절차 1 | 내부 기능brin_minmax_multi_opcinfo () |
지원 절차 2 | 내부 기능brin_minmax_multi_add_value () |
지원 절차 3 | 내부 기능brin_minmax_multi_consistent () |
지원 절차 4 | 내부 기능brin_minmax_multi_union () |
지원 절차 5 | 내부 기능brin_minmax_multi_options () |
지원 절차 11 | 두 값 (범위의 길이) 사이의 거리를 계산하는 함수 |
토토 캔 전략 1 | 토토 캔보다 |
토토 캔 전략 2 | 토토 캔는 덜 동일하지 않거나 |
토토 캔 전략 3 | 토토 캔 동등한 |
토토 캔 전략 4 | 토토 캔는 더 큰 것 또는 평등보다 |
토토 캔 전략 5 | 토토 캔보다 더 큰 |
Minmax 및 포함 작업자 클래스는 크로스 데이터 유형 연산자를 지원하지만 의존성은 더욱 복잡해집니다. Minmax 토토 캔 클래스는 전체 운영자 세트를 동일한 데이터 유형을 가진 두 인수로 정의해야합니다.표 64.6또는 동일한 토토 캔 전략 자체. 종속성 연산자는로 정의해야합니다.스토리지
데이터 유형 왼쪽 인수와 다른 지원되는 데이터 유형은 지원되는 연산자의 오른쪽 인수입니다. 보다float4_minmax_ops
Minmax의 예로서box_inclusion_ops
포함의 예로
문서에 올바르지 않은 내용이 있으면 일치하지 않습니다.이 양식문서 문제를보고하려면