윈 토토 : 문서 : 9.4 : | |||
---|---|---|---|
PostgreSQL : 문서 : 9.4 : 토토 사이트 토토 사이트 클래스 | 스포츠 토토 사이트 : 문서 : 9.4 : 진 인덱스 | 58 장. 진 인덱스 | 토토 핫 : 문서 : 9.4 : 토토 핫 |
the진인터페이스는 높은 수준의 추상화를 가지고있어 액세스 방법 구현자가 액세스하는 데이터 유형의 의미를 구현해야합니다. 그만큼진레이어 자체는 동시성, 트리 구조 로깅 및 검색을 처리합니다.
a를 얻는 데 필요한 모든 것진Access Method Working은 트리의 키의 동작과 키, 인덱스 토토 결과 및 인덱스 가능한 쿼리 간의 관계를 정의하는 몇 가지 사용자 정의 메소드를 구현하는 것입니다. 요컨대진확장 성과 일반, 코드 재사용 및 깨끗한 인터페이스를 결합합니다.
운영자가 클래스하는 세 가지 방법이 있습니다진제공해야합니다 :
int 비교 (Datum A, Datum B)
두 개의 키를 비교하고 (색인 된 토토 결과이 아님) 0, 0보다 적은 정수를 반환합니다. 널 키는이 기능으로 전달되지 않습니다.
Datum *ExtractValue (Datum itemvalue, int32 *nkeys, bool ** nullflags)
인덱스 할 토토 결과이 주어진 Palloc'd Keys를 반환합니다. 반환 된 키의 수는에 저장되어야합니다.*nkeys. 키가 null 일 수 있다면 Palloc a array*nkeys bool필드, 주소를 저장*nullflags,이 널 플래그를 필요에 따라 설정합니다.*nullflags남겨질 수 있습니다null(초기 값) 모든 키가 null이 아닌 경우. 반환 값은입니다.null토토 결과에 키가 포함되어 있지 않은 경우.
Datum *ExtractQuery (Datum Query, Int32 *Nkeys, StrategyNumber N, BOOL ** PMATCH, 포인터 ** extra_data, bool ** nullflags, int32 *searchmode)
쿼리 할 값이 주어진 Palloc'd Keys를 반환합니다. 즉,쿼리왼쪽이 색인화 된 열인 인덱스 가능한 연산자의 오른쪽에있는 값입니다.n운영자 클래스 내 운영자의 전략 번호입니다 (참조섹션 35.14.2). 자주,ExtractQuery
상담해야합니다n데이터 유형을 결정하려면쿼리및 주요 값을 추출하는 데 사용해야하는 메소드. 반환 된 키의 수는에 저장되어야합니다.*nkeys. 키가 null 일 수 있다면 Palloc a array*nkeys bool필드, 주소를 저장*nullflags,이 널 플래그를 필요에 따라 설정합니다.*nullflags남겨질 수 있습니다null(초기 값) 모든 키가 null이 아닌 경우. 반환 값은입니다.null쿼리키가 포함되어 있습니다.
SearchMode허용하는 출력 인수입니다ExtractQuery
검색 수행 방법에 대한 세부 정보를 지정합니다. 만약에*SearchMode로 설정되었습니다gin_search_mode_default(전화 전에 초기화 된 값), 반환 된 키 중 하나 이상 일치하는 토토 결과 만 후보 일치로 간주됩니다. 만약에*SearchMode로 설정되었습니다gin_search_mode_include_empty, 그 다음 하나 이상의 일치 키가 포함 된 토토 결과 외에도 키가 전혀없는 토토 결과은 후보 일치로 간주됩니다. (이 모드는 예를 들어 IS 서브 세트 오퍼레이터를 구현하는 데 유용합니다.) if*SearchMode로 설정되었습니다gin_search_mode_all, 인덱스의 모든 널이 아닌 토토 결과은 반환 된 키와 일치하는지 여부에 관계없이 후보 일치로 간주됩니다. (이 모드는 본질적으로 전체 인덱스를 스캔해야하므로 다른 두 가지 선택보다 훨씬 느립니다. 그러나 코너 케이스를 올바르게 구현해야 할 수도 있습니다. 대부분의 경우이 모드가 필요한 연산자는 아마도 진 운영자 클래스를위한 좋은 후보가 아닐 것입니다.)이 모드를 설정하는 데 사용하는 기호는에 정의되어 있습니다.access/gin.h.
PMATCH부분 일치가 지원 될 때 사용하기위한 출력 인수입니다. 사용하려면ExtractQuery
배열을 할당해야합니다*nkeys부울 및 주소를 보관하십시오.*PMATCH. 해당 키에 부분 일치가 필요한 경우 배열의 각 요소가 true로 설정되어야합니다. 만약에*PMATCH로 설정되었습니다NULL그런 다음 진은 부분 일치가 필요하지 않다고 가정합니다. 변수가 초기화되어NULL전화하기 전에,이 인수는 부분 일치를 지원하지 않는 운영자 클래스에서 단순히 무시할 수 있습니다.
extra_data허용하는 출력 인수입니다ExtractQuery
추가 데이터를 전달하려면일관성
and비교파
방법. 사용하려면ExtractQuery
배열을 할당해야합니다*nkeys주소를 포인터로 보관하고*엑스트라 _data, 그런 다음 원하는 것을 개별 포인터에 보관하십시오. 변수가 초기화되어NULL호출하기 전에이 인수는 추가 데이터가 필요하지 않은 운영자 클래스에서 단순히 무시할 수 있습니다. 만약에*엑스트라 _data설정되어 전체 배열이에 전달됩니다.일관성
메소드 및 적절한 요소비교파
메소드
운영자 클래스는 인덱스 된 항목이 쿼리와 일치하는지 확인하는 기능을 제공해야합니다. 그것은 두 가지 맛으로 온다, 부울일관성
함수 및 3 대triconsistent
기능.triconsistent
둘 다의 기능을 다루므로 삼색을 제공하는 것만으로 충분합니다. 그러나 부울 변형이 계산하기가 상당히 저렴한 경우 둘 다를 제공하는 것이 유리할 수 있습니다. 부울 변형 만 제공되는 경우 모든 키를 가져 오기 전에 인덱스 토토 결과을 반박하는 데 의존하는 일부 최적화가 비활성화됩니다.
bool 일관성 (bool check [], StrategyNumber N, Datum Query, Int32 Nkeys, Pointer extra_data [], bool *RECHECK, DATUM QUERYKEYS [], BOOL NULLFLAGS [])
인덱스 된 항목이 전략 번호로 쿼리 연산자를 만족시키는 경우 true를 반환합니다n(또는 재확인 표시가 반환되는 경우이를 만족시킬 수도 있음). 이 기능은 이후로 인덱싱 된 토토 결과의 값에 직접 액세스하지 못합니다.gin품목을 명시 적으로 저장하지 않습니다. 오히려, 사용 가능한 것은 쿼리에서 추출한 주요 값이 주어진 인덱스 항목에 나타나는 지식입니다. 그만큼check배열 길이nkeys, 이는 이전에 반환 한 키의 수와 동일합니다ExtractQuery
이것쿼리Datum. 의 각 요소check인덱스 항목에 해당 쿼리 키가 포함 된 경우 배열이 사실입니다.ExtractQuery
결과 배열은 인덱스 토토 결과에 있습니다. 원래쿼리Datum은의 경우 통과됩니다일관성
방법을 참조해야합니다.QueryKeys []andnullflags []이전에 반품 배열ExtractQuery
. extra_dataExtra-Data 배열은입니다.ExtractQuery
또는NULL없음.
언제ExtractQuery
NULL 키를 반환QueryKeys [], 해당check []인덱스 항목에 null 키가 포함 된 경우 요소가 참입니다. 즉,의 의미론check []. 그만큼일관성
함수는 해당하는 것을 검사 할 수 있습니다nullflags []정기적 인 값 일치와 널 매치의 차이를 알려야하는 경우 요소
성공,*재전송17501_17743*재전송힙 튜플이 쿼리와 일치한다는 것을 허위로 설정합니다. 그리고의 진정한 반환 값*재전송true로 설정된 힙 튜플이 쿼리와 일치 할 수 있음을 의미하므로 원래 인덱스 항목에 대해 쿼리 연산자를 직접 평가하여 가져 와서 다시 확인해야합니다..
GinternaryValue triconsistent (Ginternaryvalue check [], StrategyNumber N, Datum Query, int32 nkeys, pointer extra_data [], datum querykeys [], bool nullflags [])
triconsistent
|일관성
그러나 부울 대신check [], 각 키에 대한 세 가지 가능한 값이 있습니다 :gin_true, gin_falseandgin_maybe. gin_falseandgin_true일반 부울 값과 같은 의미를 갖습니다.gin_maybe| 해당 키의 존재가 알려지지 않았 음을 의미합니다. 언제gin_maybe값이 존재하고, 함수는 인덱스 항목에 해당 쿼리 키가 포함되어 있는지 여부에 관계없이 항목이 일치하는 경우 gin_true 만 반환해야합니다. 마찬가지로, 함수는 항목이 일치하지 않는 경우에만 GIN_MAYBE 키를 포함하는지 여부에 관계없이 GIN_FALSE를 반환해야합니다. 결과가 gin_maybe 항목에 의존하는 경우, 즉, 알려진 쿼리 키를 기반으로 일치를 확인하거나 반박 할 수 없으므로 함수는 gin_maybe를 반환해야합니다..
gin_maybe 값이 없을 때checkVector,gin_maybe반환 값은 설정과 동일합니다Recheck부울의 깃발일관성
기능.
선택적으로, 운영자 클래스진다음 방법을 제공 할 수 있습니다.
int comparePartial (Datum partial_key, Datum Key, StrategyNumber N, Pointer extra_data)
부분 무관 쿼리 키를 색인 키와 비교합니다. 부호가 결과를 나타내는 정수를 반환합니다. 0보다 작 으면 인덱스 키가 쿼리와 일치하지 않지만 인덱스 스캔이 계속되어야합니다. 0은 인덱스 키가 쿼리와 일치 함을 의미합니다. 0보다 큰 것은 더 이상 일치 할 수 없기 때문에 인덱스 스캔이 중지되어야 함을 나타냅니다. 전략 번호n부분 일치 쿼리를 생성 한 연산자의 스캔을 종료 할시기를 결정하기 위해 의미론이 필요합니다. 또한,extra_data|ExtractQuery
또는null없음. 널 키는이 기능으로 전달되지 않습니다.
지원하려면"부분 경기"쿼리, 운영자 클래스는를 제공해야합니다.비교파
방법 및 그ExtractQuery
메소드를 설정해야합니다PMATCH부분 매치 쿼리가 발생한 경우 매개 변수. 보다섹션 58.4.2자세한 내용.
다양한 데이터 유형Datum위에서 언급 한 값은 운영자 클래스에 따라 다릅니다. 토토 결과 값이 전달되었습니다ExtractValue
항상 운영자 클래스의 입력 유형이므로 모든 주요 값은 클래스의 여야합니다스토리지타입. 의 유형쿼리인수가 통과되었습니다ExtractQuery
, 일관성
andtriconsistent
전략 번호로 식별 된 클래스 멤버 운영자의 오른쪽 입력 유형으로 지정된 내용입니다. 올바른 유형의 키 값을 추출 할 수있는 한 이것은 항목 유형과 동일 할 필요가 없습니다.