36.16. 와이즈 토토에 대한 확장 인터페이스#

지금까지 설명한 절차를 통해 새로운 유형, 새로운 기능 및 새로운 운영자를 정의 할 수 있습니다. 그러나 새 데이터 유형의 열에서 아직 와이즈 토토를 정의 할 수 없습니다.운영자 클래스새 데이터 유형의 경우. 이 섹션의 뒷부분에서 우리는 예를 들어이 개념을 설명합니다. 예를 들어, 절대 값 순서를 올라가는 복소수를 저장하고 정렬하는 B-Tree Index 메소드에 대한 새로운 연산자 클래스..

운영자 클래스를 그룹으로 그룹화 할 수 있습니다운영자 가족의미 적으로 호환 가능한 클래스 간의 관계를 보여줍니다. 단일 데이터 유형 만 참여하면 운영자 클래스가 충분하므로 먼저 해당 사례에 중점을두고 운영자 패밀리로 돌아갑니다.

36.16.1. 색인 방법 및 운영자 클래스#

운영자 클래스는와 같은 인덱스 액세스 방법과 관련이 있습니다.PostgreSQL : 문서 : 17 : 64.1. 토토 토토 색인또는PostgreSQL : 문서 : 17 : 64.4. 진 토토 캔. 사용자 정의 색인 액세스 방법은로 정의 될 수 있습니다.액세스 방법 만들기. 보다토토 베이 : 문서 : 17 : 62 장 색인 액세스 방법 인터페이스 정의자세한 내용.

와이즈 토토 방법의 루틴은 와이즈 토토 메소드가 작동하는 데이터 유형에 대해 직접 알지 못합니다. 대신, an운영자 클래스인덱스 메소드가 특정 데이터 유형으로 작업하는 데 사용하는 일련의 작업 세트를 식별합니다. 그들이 지정한 한 가지는이기 때문에 운영자 클래스가 소위 호출됩니다.여기서-인덱스와 함께 사용할 수있는 연산자 (즉, 인덱스 스캔 자격으로 변환 할 수 있음). 운영자 클래스도 일부를 지정할 수 있습니다지원 기능와이즈 토토 메소드의 내부 작업에 필요하지만 어떤 것도 직접적으로 일치하지 않습니다여기서-와이즈 토토와 함께 사용할 수있는 클라스 연산자.

동일한 데이터 유형 및 와이즈 토토 방법에 대해 여러 연산자 클래스를 정의 할 수 있습니다. 이렇게하면 단일 데이터 유형에 대해 여러 세트의 인덱싱 의미를 정의 할 수 있습니다.

동일한 연산자 클래스 이름은 여러 다른 색인 메소드에 사용할 수 있습니다 (예 : B-Tree 및 HASH 색인 메소드는 운영자 클래스가int4_ops), 그러나 각 클래스는 독립적 인 엔티티이며 별도로 정의되어야합니다.

36.16.2. 색인 메소드 전략#

운영자 클래스와 관련된 연산자는에 의해 식별됩니다.전략 번호, 운영자 클래스의 맥락에서 각 연산자의 의미를 식별하는 역할을합니다. 예를 들어, B- 트리는 키에 엄격한 순서를 부과하고, 더 큰 것보다 적고, 운영자는and더 크거나B- 트리와 관련하여 흥미 롭습니다. 왜냐하면PostgreSQL사용자가 연산자를 정의 할 수 있습니다.PostgreSQL연산자의 이름을 볼 수 없습니다 (예 :<또는> =) 어떤 종류의 비교인지 알려주십시오. 대신 와이즈 토토 메소드는 세트를 정의합니다.전략, 일반화 된 운영자로 생각할 수 있습니다. 각 운영자 클래스는 특정 데이터 유형에 대한 각 전략 및 인덱스 의미의 해석에 해당하는 실제 연산자가 어떤지 지정합니다..

B- 트리 색인 메소드는 5 가지 전략을 정의합니다.표 36.3.

표 36.3. B- 트리 전략

작동 전략 번호
1
작거나 평등 한 2
Equal 3
더 크거나 평등 4
보다 큰 5

해시 인덱스는 평등 비교 만 지원하므로 하나의 전략 만 사용합니다.표 36.4.

표 36.4. 해시 전략

작동 전략 번호
Equal 1

GIST 인덱스는 더 유연합니다. 고정 된 전략 세트가 전혀 없습니다. 대신,일관성각 특정 GIST 운영자 클래스의 지원 루틴은 전략 번호를 해석하지만 좋아합니다. 예를 들어, 몇몇 내장 GIST 인덱스 운영자 클래스는 2 차원 기하학적 객체를 색인하여를 제공합니다.R-Tree전략에 표시표 36.5. 이들 중 4 개는 진정한 2 차원 테스트 (오버 랩, 동일, 포함)입니다.

표 36.5. GIST 2 차원R-Tree전략

작동 전략 번호
엄격하게 왼쪽 1
오른쪽으로 확장되지 않습니다 2
오버랩 3
왼쪽으로 확장되지 않습니다 4
엄격하게 5
동일 6
포함 7
포함 8
위에 확장되지 않습니다 9
엄격하게 아래 10
엄격하게 위 11
아래로 확장되지 않습니다 12

SP-Gist 인덱스는 유연성의 GIST 인덱스와 유사합니다. 고정 된 전략 세트가 없습니다. 대신 각 운영자 클래스의 지원 루틴은 운영자 클래스의 정의에 따라 전략 번호를 해석합니다.표 36.6.

표 36.6. SP-Gist Point 전략

작동 전략 번호
엄격하게 왼쪽 1
엄격하게 5
동일 6
포함 8
엄격하게 아래 10
엄격하게 위 11

진 인덱스는 고정 된 전략 세트가 없다는 점에서 GIST 및 SP-GIST 인덱스와 유사합니다. 대신 각 운영자 클래스의 지원 루틴은 운영자 클래스의 정의에 따라 전략 번호를 해석합니다.표 36.7.

표 36.7. 진 배열 전략

작동 전략 번호
오버랩 1
포함 2
3
Equal 4

브린 인덱스는 고정 된 전략 세트가 없다는 점에서 GIST, SP-GIST 및 GIN 인덱스와 유사합니다. 대신 각 운영자 클래스의 지원 루틴은 운영자 클래스의 정의에 따라 전략 번호를 해석합니다.Minmax운영자 클래스에 표시표 36.8.

표 36.8. 브린 민메스 전략

작동 전략 번호
1
작거나 평등 한 2
Equal 3
더 크거나 평등 4
보다 큰 5

위에 나열된 모든 연산자가 부울 값을 반환합니다. 실제로 와이즈 토토 메서드 검색 연산자로 정의 된 모든 운영자는 유형을 반환해야합니다부울, a의 최상위 레벨에 나타나야하므로여기서인덱스와 함께 사용할 조항. (일부 인덱스 액세스 방법도 지원주문 연산자, 일반적으로 부울 값을 반환하지 않습니다. 그 기능은에서 논의됩니다.섹션 36.16.7.)

36.16.3. 색인 방법 지원 루틴#

전략은 일반적으로 시스템이 인덱스 사용 방법을 파악하기에 충분한 정보가 아닙니다. 실제로 인덱스 방법은 작업을 위해 추가 지원 루틴이 필요합니다.

전략과 마찬가지로 운영자 클래스는 주어진 데이터 유형 및 시맨틱 해석에 대해 이러한 각 역할을 수행 해야하는 특정 기능을 식별합니다. 색인 메소드는 필요한 기능 세트를 정의하고 연산자 클래스는에 할당하여 사용할 올바른 기능을 식별합니다.지원 기능 번호와이즈 토토 메소드에 의해 지정 됨

또한 일부 opclass를 사용하면 사용자가 동작을 제어하는 ​​매개 변수를 지정할 수 있습니다. 각 내장 와이즈 토토 액세스 방법은 선택 사항이 있습니다옵션지원 함수, OPCLASS 별 매개 변수 세트를 정의합니다.

B- 트리는 비교 지원 기능이 필요하며,에 표시된대로 운영자 클래스 저자의 옵션에서 4 개의 추가 지원 기능을 제공 할 수 있습니다.표 36.9. 이러한 지원 기능에 대한 요구 사항은 추가로 설명되어 있습니다.섹션 64.1.3.

표 36.9. B- 트리 지원 기능

기능 지원 번호
두 키를 비교하고 0보다 작은 정수를 0, 0 또는 0보다 더 반환하여 첫 번째 키가 두 번째 또는 두 번째보다 동일인지 또는 얼마나든지를 나타냅니다 1
C-Callable 정렬 지원 기능의 주소를 반환합니다 (선택 사항) 2
테스트 값을 기본 값 플러스/마이너스 오프셋과 비교하고 비교 결과 (선택 사항)에 따라 true 또는 false를 반환합니다. 3
BTREE 중복 제거 최적화 (선택 사항)를 적용하기 위해 연산자 클래스를 사용하는 와이즈 토토에 안전한 지 결정합니다. 4
이 연산자 클래스에 특정한 옵션 정의 (선택 사항) 5

해시 인덱스는 하나의 지원 기능이 필요하며,에 표시된대로 운영자 클래스 저자의 옵션에서 두 개의 추가 기능을 제공 할 수 있습니다.표 36.10.

표 36.10. 해시 지원 기능

기능 지원 번호
키에 대한 32 비트 해시 값 계산 1
64 비트 소금이 주어진 키에 대해 64 비트 해시 값을 계산합니다. 소금이 0 인 경우 결과의 낮은 32 비트는 함수 1 (선택 사항)으로 계산 된 값과 일치해야합니다. 2
이 연산자 클래스에 특정한 옵션 정의 (선택 사항) 3

GIST 인덱스에는 11 개의 지원 기능이 있으며 그 중 6 개는 선택 사항입니다.표 36.11. (자세한 내용은 참조PostgreSQL : 문서 : 17 : 64.2. GIST 스포츠 토토 베트맨.)

표 36.11. GIST 지원 기능

기능 설명 지원 번호
일관성 키가 쿼리 예선을 만족시키는 지 결정 1
Union 열쇠 세트의 Union Union 2
압축 색인화 할 키 또는 값의 압축 표현 계산 (선택 사항) 3
DEMOMPRESS 압축 키 (선택 사항)의 압축 압축 표현 계산 4
페널티 주어진 Subtree의 키를 사용하여 새 키를 하위 트리에 삽입 한 페널티 컴퓨팅 5
picksplit 새 페이지로 이동할 페이지의 항목을 결정하고 결과 페이지를 위해 Union 키를 계산합니다 6
동일 두 개의 키를 비교하고 동등한 경우 true를 반환합니다 7
거리 키에서 쿼리 값까지의 거리 결정 (선택 사항) 8
fetch 인덱스 전용 스캔을위한 압축 키의 원본 표현 (선택 사항) 9
옵션 이 연산자 클래스에 특정한 옵션 정의 (선택 사항) 10
SortsUpport 빠른 와이즈 토토 빌드 (선택 사항)에서 사용할 정렬 비교기 제공 11

SP-Gist 인덱스에는 6 개의 지원 기능이 있으며 그 중 하나는 선택 사항입니다.표 36.12. (자세한 내용은 참조PostgreSQL : 문서 : 17 : 64.3. SP-Gist 롤 토토.)

표 36.12. SP-Gist 지원 기능

기능 설명 지원 번호
config 운영자 클래스에 대한 기본 정보 제공 1
선택 내부 튜플에 새 값을 삽입하는 방법 결정 2
picksplit 값 세트를 분할하는 방법 결정 3
Inner_consistent 쿼리를 검색 해야하는 하위 파티션을 결정 4
Leaf_consistent 키가 쿼리 예선을 만족시키는 지 결정 5
옵션 이 연산자 클래스에 특정한 옵션 정의 (선택 사항) 6

진 인덱스에는 7 개의 지원 기능이 있으며 그 중 4 개는 선택 사항입니다.표 36.13. (자세한 내용은 참조PostgreSQL : 문서 : 17 : 64.4. 진 토토 캔.)

표 36.13. 진 지원 기능

기능 설명 지원 번호
비교 두 키를 비교하고 0보다 작은 정수를 0, 0 또는 0보다 더 반환하여 첫 번째 키가 두 번째 또는 두 번째보다 동일인지 또는 얼마나든지를 나타냅니다 1
ExtractValue 인덱싱 할 값에서 키를 추출합니다 2
ExtractQuery 쿼리 조건에서 키를 추출 3
일관성 값이 쿼리 조건 (부울 변형)과 일치하는지 여부를 결정합니다 (지원 함수가있는 경우 선택 사항 6) 4
비교파 인덱스에서 쿼리와 키에서 부분 키를 비교하고 0, 0 또는 0보다 작은 정수를 반환하여 GIN 이이 인덱스 항목을 무시하거나 항목을 일치로 처리하거나 인덱스 스캔을 중지 해야하는지 여부를 나타냅니다. 5
triconsistent 값이 쿼리 조건과 일치하는지 여부 결정 (지원 함수 4가있는 경우 선택 사항) 6
옵션 이 연산자 클래스에 특정한 옵션 정의 (선택 사항) 7

브린 인덱스에는 5 개의 기본 지원 기능이 있으며 그 중 하나는 선택 사항입니다.표 36.14. 일부 버전의 기본 기능에는 추가 지원 기능이 제공되어야합니다.섹션 64.5.3.)

표 36.14. 브린 지원 기능

기능 설명 지원 번호
opcinfo 인덱스 된 열의 요약 데이터를 설명하는 내부 정보를 반환 1
add_value 기존 요약 와이즈 토토 튜플에 새 값 추가 2
일관성 값이 쿼리 조건과 일치하는지 결정 3
Union 두 개의 요약 튜플의 Union Compute Union 4
옵션 이 연산자 클래스에 특정한 옵션 정의 (선택 사항) 5

검색 연산자와 달리 지원 기능을 반환하십시오. 특정 인덱스 메소드가 기대하는 데이터 유형. 예를 들어, 서명 된 정수 인 B- 트리의 비교 함수의 경우.

36.16.4. 예#

이제 우리는 아이디어를 보았으므로 새로운 운영자 클래스를 만드는 약속 된 예입니다. (이 예제의 작업 사본을 찾을 수 있습니다SRC/Tutorial/Complex.candsrc/튜토리얼/complex.sql소스 분포에서.) 연산자 클래스는 복소수를 절대 값 순서로 정렬하는 연산자를 캡슐화하므로 이름을 선택합니다.complex_abs_ops. 먼저, 우리는 일련의 운영자가 필요합니다.PostgreSQL : 문서 : 17 : 36.14. 사용자 정의 롤 토토. B- 트리의 운영자 클래스의 경우 필요한 운영자는 다음과 같습니다.

  • 절대 값이 적은 것보다 (전략 1)
  • 절대 값은 평등 한 것보다 덜 (전략 2)
  • 절대 값 평등 (전략 3)
  • 절대-값은 평등 한 것보다 더 큰 (전략 4)
  • 절대-값보다 큰 (전략 5)

관련 비교 연산자 세트를 정의하는 최소 오류가 발생하기 쉬운 방법은 먼저 B-Tree 비교 지원 기능을 작성한 다음 다른 기능을 지원 기능 주변의 한 줄 랩퍼로 작성하는 것입니다. 이것은 코너 케이스에 대한 일관성없는 결과를 얻을 확률을 줄입니다.

#define mag (c) ((c)-> x*(c)-> x + (c)-> y*(c)-> y)

이제 기능보다 적은 기능은 다음과 같습니다.

pg_function_info_v1 (complex_abs_lt);

다른 네 가지 함수는 내부 함수의 결과를 0과 비교하는 방법에만 다릅니다.

다음으로 SQL의 함수에 따라 기능과 연산자를 선언합니다.

함수 만들기 complex_abs_lt (복잡한, 복잡한) bool을 반환합니다filename','complex_abs_lt '

올바른 통근자 및 부정 자 연산자뿐만 아니라 적절한 제한 및 결합 선택성 함수를 지정하는 것이 중요합니다. 그렇지 않으면 최적화가 인덱스를 효과적으로 사용할 수 없습니다..

주목할만한 다른 일이 여기에서 일어나고 있습니다 :

  • 하나의 연산자 만있을 수 있습니다.=및 유형 가져 오기복잡한두 피연산자 모두. 이 경우 다른 운영자가 없습니다=for복잡한, 그러나 실용적인 데이터 유형을 구축하고 있다면 아마도 원할 것입니다=복소수에 대한 일반 평등 조작 (절대 값의 평등이 아님). 이 경우 다른 운영자 이름을 사용해야합니다.complex_abs_eq.

  • 비록PostgreSQL다른 인수 데이터 유형이있는 한 동일한 SQL 이름을 가진 함수에 대처할 수 있으며, C는 이름이있는 하나의 전역 기능에만 대처할 수 있습니다. 그래서 우리는 C 기능의 이름을 단순한 것과 같은 이름으로 지정해서는 안됩니다abs_eq. 일반적으로 다른 데이터 유형의 함수와 충돌하지 않도록 데이터 유형 이름을 C 함수 이름에 포함시키는 것이 좋습니다.

  • 우리는 함수의 SQL 이름을 만들 수있었습니다abs_eq, 의존PostgreSQL동일한 이름의 다른 SQL 함수와 인수 데이터 유형으로 구별됩니다. 예제를 단순하게 유지하기 위해 함수의 이름을 C 레벨과 SQL 레벨에서 동일한 이름으로 만듭니다.

다음 단계는 B- 트리가 요구하는 지원 루틴의 등록입니다. 이것을 구현하는 예제 코드는 연산자 함수를 포함하는 동일한 파일에 있습니다.

함수 만들기 complex_abs_cmp (복잡하고 복잡한)filename'

이제 필요한 연산자와 지원 루틴을 보유하고 있으므로 마침내 연산자 클래스를 만들 수 있습니다.

운영자 클래스 Complex_ABS_OPS 작성

그리고 우리는 끝났습니다! 이제 b- 트리 색인을 생성하고 사용하는 것이 가능해야합니다복잡한열.

우리는 :에서와 같이 운영자 항목을 더 구두로 쓸 수있었습니다.

연산자 1 <(복잡한, 복잡한),

그러나 운영자가 동일한 데이터 유형을 취할 때 그렇게 할 필요는 없습니다.

위의 예는이 새로운 운영자 클래스를 기본 B- 트리 연산자 클래스로 만들려고한다고 가정합니다.복잡한데이터 유형. 그렇지 않으면 그냥 그 단어를 남겨주세요기본값.

36.16.5. 운영자 수업 및 운영자 가족#

지금까지 우리는 운영자 클래스가 하나의 데이터 유형만을 다루고 있다고 암시 적으로 가정했습니다. 특정 인덱스 열에는 하나의 데이터 유형 만있을 수 있지만 인덱스 된 열을 다른 데이터 유형의 값과 비교하는 인덱스 작업에 종종 유용합니다.

이러한 요구를 처리하려면PostgreSQLan의 개념 사용운영자 가족. 운영자 패밀리에는 하나 이상의 운영자 클래스가 포함되어 있으며 가족 전체에 속하지만 가족 내의 단일 클래스에는 포함되지 않는 인덱스 가능한 운영자 및 해당 지원 기능도 포함 할 수 있습니다.느슨한특정 클래스에 묶여있는 것이 아니라 가족 내에서. 일반적으로 각 운영자 클래스는 단일 데이터 유형 연산자가 포함되어 있고 크로스 데이터 유형 연산자는 가족이 느슨합니다.

운영자 패밀리의 모든 연산자와 기능에는 호환성 요구 사항이 인덱스 메소드에 의해 설정되는 상당한 의미론이 있어야합니다. 그러므로 당신은 왜 왜 가족의 특정 하위 집합을 운영자 수업으로 단독으로 짜는 것을 귀찮게하는지 궁금 할 것입니다.

예를 들어PostgreSQL내장 B- 트리 운영자 제품군이 있습니다integer_ops, 여기에는 운영자 클래스 포함int8_ops, int4_opsint2_ops와이즈 토토의 경우bigint (int8), Integer (int4) 및smallint (int2) 각각 열. 이 가족은 또한 이러한 두 가지 유형 중 하나를 비교할 수있는 교차 데이터 유형 비교 연산자가 포함되어있어 이러한 유형 중 하나의 인덱스를 다른 유형의 비교 값을 사용하여 검색 할 수 있습니다.

btree를 사용하여 운영자 패밀리 integer_ops 만들기;

이 정의를 주목하십시오오버로드운영자 전략 및 지원 기능 번호 : 각 숫자는 가족 내에서 여러 번 발생합니다. 특정 숫자의 각 인스턴스에 별개의 입력 데이터 유형이있는 한 이는 허용됩니다.

B-Tree 운영자 제품군에서 가족의 모든 운영자는 상세하게 지정된대로 호환 적으로 정렬해야합니다.섹션 64.1.2. 가족의 각 연산자마다 연산자와 동일한 두 입력 데이터 유형을 갖는 지원 기능이 있어야합니다.

다중 데이터 유형 해시 운영자 제품군을 구축하려면 가족이 지원하는 각 데이터 유형에 대해 호환 해시 지원 기능을 작성해야합니다. 여기서 호환성은 함수가 값이 다른 유형 인 경우에도 가족의 평등 연산자가 동일하게 간주되는 두 값에 대해 동일한 해시 코드를 반환하도록 보장 함을 의미합니다.

GIST, SP-GIST 및 GIN Indexes에는 교차 데이터 유형 작업에 대한 명시적인 개념이 없습니다. 지원되는 연산자 세트는 주어진 운영자 클래스의 기본 지원 기능이 처리 할 수있는 모든 것입니다.

브린에서 요구 사항은 운영자 클래스를 제공하는 프레임 워크에 따라 다릅니다. 기반 운영자 클래스의 경우Minmax, 필요한 동작은 B- 트리 운영자 패밀리와 동일합니다. 가족의 모든 운영자는 호환 적으로 정렬해야하며 캐스트는 관련 정렬 주문을 변경해서는 안됩니다..

note

이전PostgreSQL8.3, 운영자 패밀리의 개념이 없었으므로 인덱스와 함께 사용하려는 모든 교차 데이터 유형 연산자는 인덱스의 운영자 클래스에 직접 묶어야했습니다. 이 접근법은 여전히 ​​작동하지만 인덱스의 종속성을 너무 광범위하게 만들기 때문에 더 이상 사용되지 않으며 플래너는 두 데이터 유형이 동일한 운영자 패밀리에서 운영자를 가질 때 더 효과적으로 데이터 유형 비교를 처리 할 수 ​​있기 때문에.

36.16.6. 운영자 클래스에 대한 시스템 종속성#

PostgreSQL운영자 클래스를 사용하여 인덱스와 함께 사용할 수 있는지 여부보다 더 많은 방법으로 연산자의 속성을 유추합니다. 따라서 데이터 유형의 열을 인덱싱하려는 의도가 없어도 운영자 클래스를 생성 할 수 있습니다.

특히와 같은 SQL 기능이 있습니다.주문 byand별개의값의 비교 및 ​​정렬이 필요합니다. 사용자 정의 데이터 유형에서 이러한 기능을 구현하려면PostgreSQL데이터 유형의 기본 B-Tree 연산자 클래스를 찾습니다. 그만큼Equals이 운영자 클래스의 구성원은 시스템의 가치 평등 개념을 정의합니다그룹 byand별개의및 운영자 클래스가 부과하는 정렬 순서는 기본값을 정의합니다주문 by주문.

데이터 유형에 대한 기본 B-Tree 연산자 클래스가 없으면 시스템은 기본 해시 운영자 클래스를 찾습니다. 그러나 이러한 종류의 운영자 클래스는 평등만을 제공하기 때문에 분류가 아닌 그룹화 만 지원할 수 있습니다..

데이터 유형에 대한 기본 연산자 클래스가 없으면와 같은 오류가 발생합니다.주문 연산자를 식별 할 수 없음데이터 유형과 함께 이러한 SQL 기능을 사용하려고하면

note

inPostgreSQL7.4 전 버전, 정렬 및 그룹화 작업은 암시 적으로 운영자라는 이름을 사용합니다=, <. 기본 연산자 클래스에 의존하는 새로운 동작은 특정 이름을 가진 연산자의 동작에 대해 가정하지 않아도됩니다.

비 디폴트 B- 트리 운영자 클래스에 의한 정렬은 클래스의 연산자를 A에서 지정하여 가능합니다사용옵션, 예를 들어

SELECT *에서 MyTable Order에서 Somecol에서 ~ <~;

또는 클래스의 더 큰 운영자를 지정하여사용내림차순 정렬을 선택합니다.

사용자 정의 유형의 배열 비교는 유형의 기본 B- 트리 연산자 클래스에 의해 정의 된 의미에 의존합니다. 기본 B- 트리 연산자 클래스가 없지만 기본 해시 운영자 클래스가있는 경우 배열 평등이 지원되지만 비교를 주문하지 않습니다.

더 많은 데이터 유형 특정 지식이 필요한 또 다른 SQL 기능범위 오프셋 선행/follow창 함수에 대한 프레임 옵션 (참조섹션 4.2.8). 와 같은 쿼리의 경우

sum (x)을 선택하십시오 (x)의 순서는 앞서 5와 10 사이의 10 사이의 범위)

주문 방법을 아는 것만으로는 충분하지 않습니다x; 데이터베이스는 또한 방법을 이해해야합니다SUTCRART 5또는추가 10현재 행의 값으로x현재 창 프레임의 범위를 식별합니다. 결과 경계를 다른 행의 값과 비교하는x|주문 by주문 - 그러나 추가 및 뺄셈 연산자는 운영자 클래스의 일부가 아니므로 어떤 것이 사용되어야합니까? 다른 정렬 주문 (다른 B- 트리 연산자 클래스)이 다른 행동이 필요할 수 있기 때문에 선택이 바람직하지 않을 것입니다.in_Range정렬 순서에 맞는 추가 및 뺄셈 동작을 캡슐화하는 지원 함수. IN_Range 지원 기능을 하나 이상 제공 할 수도 있습니다. OFFSET IN in로 사용하는 것이 둘 이상의 데이터 유형이있는 경우범위조항. B-Tree 운영자가 창과 관련된 경우주문 by조항은 일치하는 IN_RANGE 지원 기능이 없습니다.범위 오프셋 선행/follow옵션이 지원되지 않습니다.

또 다른 중요한 점은 해시 운영자 제품군에 나타나는 평등 연산자가 해시 조인, 해시 집계 및 관련 최적화의 후보라는 것입니다. 해시 운영자 제품군은 사용할 해시 함수를 식별하기 때문에 필수적입니다.

36.16.7. 운영자 주문#

일부 인덱스 액세스 방법 (현재, GIST 및 SP-Gist 만)의 개념을 지원합니다주문 연산자. 우리가 지금까지 논의한 것은검색 연산자. 검색 연산자는 인덱스를 검색하여 모든 행을 만족시키는 모든 행을 찾을 수있는 것입니다여기서 indexed_column 운영자 Constant. 일치하는 행이 반환되는 순서에 대해 약속 된 것은 없습니다.주문 by indexed_column 운영자 Constant. 운영자가 거리를 측정하는 경우 가장 가까운 이웃 검색을 지원하기 때문입니다.

선택 * 위치별로 주문에서 <-> 포인트 '(101,456)'Limit 10;

주어진 목표 지점에 가장 가까운 10 개의 장소를 찾습니다. 위치 열의 GIST 지수는이를 효율적으로 수행 할 수 있습니다.<-->주문 연산자입니다.

검색 연산자가 부울 결과를 반환 해야하는 반면, 주문 연산자는 일반적으로 플로트 또는 숫자와 같은 다른 유형을 반환합니다. 이 유형은 일반적으로 인덱싱되는 데이터 유형과 동일하지 않습니다.PostgreSQL의 주문 개념이므로 자연스럽게 표현됩니다. 포인트 이후<-->운영자 반환float8, 다음과 같은 연산자 클래스 작성 명령에 지정할 수 있습니다.

Operator 15 <-> (Point, Point) float_ops

어디float_ops|float8. 이 선언은 와이즈 토토가 값의 값을 높이기 위해 행을 반환 할 수 있다고 명시합니다<-->운영자.

36.16.8. 운영자 클래스의 특수 기능#

가장 일반적으로 사용되는 인덱스 방법에 유용하지 않기 때문에 아직 논의하지 않은 운영자 클래스의 두 가지 특수 기능이 있습니다.

일반적으로 연산자를 연산자 클래스 (또는 가족)의 구성원으로 선언한다는 것은 인덱스 메소드가 A를 만족시키는 행 세트를 정확하게 검색 할 수 있음을 의미합니다.여기서연산자를 사용한 상태. 예를 들어:

선택 *에서 integer_column <4; 테이블에서

정수 열의 B-Tree 지수에 의해 정확하게 만족할 수 있습니다. 그러나 인덱스가 일치하는 행에 대한 부지런한 안내서로 유용한 경우가 있습니다.여기서테스트를 테스트하는 조건 다각형과 같은 비정형 물체간에 겹치는 조건. 그러나 우리는 인덱스를 사용하여 경계 상자가 대상 객체의 경계 상자와 겹치는 객체를 찾은 다음 인덱스가 발견 한 객체에서만 정확한 오버랩 테스트를 수행 할 수 있습니다.Lossy운영자의 경우. Lossy Index 검색은 인덱스 메소드를 반환하여 구현됩니다.다시 확인행이 쿼리 조건을 만족 시키거나 실제로 만족하지 못할 때 플래그. 그런 다음 핵심 시스템은 검색된 행의 원래 쿼리 조건을 테스트하여 유효한 일치로 반환 해야하는지 확인합니다.

우리가 와이즈 토토에 저장하는 상황을 다시 고려하십시오. 이 경우 와이즈 토토 항목에 전체 다각형을 저장하는 데는 별다른 가치가 없습니다. 우리는 더 간단한 유형 객체를 저장할 수도 있습니다.Box. 이 상황은에 의해 표현됩니다.스토리지옵션운영자 클래스 생성: 우리는 다음과 같은 글을 쓸 것입니다.

운영자 클래스 Polygon_ops를 만듭니다

현재, Gist, SP-Gist, Gin 및 Brin Index Methods 만 지원합니다.스토리지열 데이터 유형과 다른 유형. The Gist압축andDEMOMPRESS지원 루틴은 데이터 유형 변환을 처리해야합니다.스토리지가 사용됩니다. sp-gist도 마찬가지로 A압축스토리지 유형으로 변환 할 수있는 지원 기능이 다를 때; SP-Gist OPClass도 데이터 검색을 지원하는 경우 역전 변환은를 처리해야합니다.일관성함수. 진에서스토리지유형의 유형을 식별합니다일반적으로 인덱스 열의 유형과 다른 값-예를 들어 정수 배열 열에 대한 연산자 클래스에는 정수가있는 키가있을 수 있습니다. 진ExtractValueandExtractQuery지원 루틴은 인덱스 값에서 키를 추출 할 책임이 있습니다. 브린은 진과 비슷합니다 :스토리지유형은 저장된 요약 값의 유형을 식별하고 운영자 클래스의 지원 절차는 요약 값을 올바르게 해석 할 책임이 있습니다..

정정 제출

문서에 올바르지 않은 내용이 있으면 일치하지 않습니다.이 양식문서 문제를보고하려면