이 문서는 지원되지 않는 버전의 PostgreSQL을위한 것입니다.
당신은에 대해 같은 페이지를 볼 수 있습니다PostgreSQL : 문서 : 17 : 36.15. 토토 꽁 머니 최적화 정보버전 또는 위에 나열된 다른 지원되는 버전 중 하나입니다.

34.13. 운영자 토토 사이트 순위 정보

apostgresql연산자 정의에는 몇 가지 선택적인 조항이 포함될 수 있습니다 시스템은 운영자의 행동 방식에 대한 유용한 것들. 이것들 조항은 가능할 때마다 제공되어야합니다 사용하는 쿼리 실행에 상당한 속도를 높이십시오. 연산자. 그러나 당신이 그들에게 제공한다면, 당신은 옳다! 토토 사이트 순위 조항을 잘못 사용하면 발생할 수 있습니다 느린 쿼리, 미묘하게 잘못된 출력 또는 기타 나쁜 것들. 당신은 할 수 있습니다 확실하지 않은 경우 항상 토토 사이트 순위 조항을 제외하십시오. 그것; 유일한 결과는 쿼리가 더 느리게 실행될 수 있다는 것입니다. 그들은 필요합니다.

추가 토토 사이트 순위 조항이 향후 추가 될 수 있습니다 버전PostgreSQL. 그들 여기에 설명 된 모든 것이 8.3.23을 릴리스합니다 이해합니다.

34.13.1. Commutator

theCommutator조항, 제공되는 경우, 토토 사이트 순위의 통근자 인 토토 사이트 순위의 이름 한정된. 우리는 토토 사이트 순위 A가 토토 사이트 순위 B의 통근자라고 말합니다. 경우 (x a y)가 가능한 모든 입력 값 x, y에 대해 (y b x)와 동일합니다. B는 또한 A의 정류자입니다. 예를 들어, 연산자<특정 데이터 유형의 경우 일반적으로 각각입니다 기타의 정류자 및 토토 사이트 순위+IS 일반적으로 그 자체로 정류. 그러나 토토 사이트 순위-보통 아무것도 통근하지 않습니다.

통근 가능한 연산자의 왼쪽 피연산자 유형은 동일합니다. 정류자의 올바른 피연산자 유형으로, 그 반대도 마찬가지입니다. 그래서 통근자 토토 사이트 순위의 이름이 그 모든 것입니다postgresql조회하려면 주어야합니다 정류자, 그리고 그게 전부입니다.Commutator조항

통근자 정보를 제공하는 것이 중요합니다 인덱스에 사용되고 조항에 가입하는 연산자, 이것은 쿼리 옵티마이저를 허용하기 때문에"Flip Around"필요한 양식에 대한 그러한 조항 다른 계획 유형의 경우. 예를 들어, a가있는 쿼리를 고려하십시오 어디서 절tab1.x = tab2.y, 어디tab1.xandtab2.y는 사용자 정의 유형이며 가정합니다 저것tab2.y색인이 표시됩니다. 최적화기 방법을 결정할 수 없으면 인덱스 스캔을 생성 할 수 없습니다. 조항을 뒤집어tab2.y = tab1.x, 인덱스 스캔 기계가 볼 것으로 예상되기 때문입니다 연산자의 왼쪽에있는 인덱스 열에 제공됩니다.PostgreSQLWillnot이것이 단순히 이것이 a 유효한 변환 -의 제작자=토토 사이트 순위는 유효하다고 지정해야합니다 정류자 정보로 토토 사이트 순위를 표시합니다.

자기 응고 연산자를 정의 할 때, 당신은 그냥 그것을하십시오. 한 쌍의 정류 연산자를 정의 할 때 상황은 조금 까다 롭습니다. 첫 번째는 어떻게 될 수 있습니까? 정의 된 다른 것을 참조하십시오. 아직 정의하지 않은 다른 것을 참조하십시오. 이 문제에 대한 두 가지 해결책이 있습니다.

  • 한 가지 방법은를 생략하는 것입니다.Commutator첫 번째 연산자의 조항 정의 한 다음 두 번째 운영자의 하나를 제공합니다. 정의. 부터PostgreSQL두 번째 정의를 볼 때 연산자가 쌍으로옵니다. 자동으로 돌아가서 누락 된 것을 채 웁니다Commutator첫 번째 조항 정의.

  • 더 간단한 방법은 단지 포함하는 것입니다Commutator두 조항 정의. 언제PostgreSQL첫 번째를 처리합니다 정의하고 그것을 깨닫고Commutator존재하지 않는 연산자, 시스템은 시스템 카탈로그. 이 더미 항목에는 유효한 데이터 만 있습니다 토토 사이트 순위 이름, 왼쪽 및 오른쪽 피연산자 유형 및 결과 유형, 그게 전부PostgreSQL이 시점에서 추론 할 수 있습니다. 첫 번째 토토 사이트 순위의 카탈로그 항목은이 더미에 링크됩니다. 기입. 나중에 두 번째 연산자를 정의 할 때 시스템은 추가로 더미 항목을 업데이트합니다 두 번째 정의의 정보. 당신이 사용하려고한다면 더미 연산자가 채워지기 전에 오류 메시지 가져 오기.

34.13.2. 부정관

the부정관조항, 제공되는 경우, 운영자의 부정인 인 연산자의 이름 한정된. 우리는 운영자 A가 연산자 B의 부정 자라고 말합니다. 둘 다 부울 결과를 반환하고 (x a y)는 (x b y)와 동일합니다. 가능한 모든 입력 x, y. B는 또한 부정 자입니다 A. 예를 들어<and =대부분의 데이터 유형에 대한 부정 쌍입니다. an 토토 사이트 순위는 결코 자신의 부정자가 될 수 없습니다.

정류자와 달리 한 쌍의 단백조 연산자가 유효하게 할 수 있습니다 서로의 부정 자로 표시됩니다. 그것은 (a x)를 의미합니다 모든 X의 경우 (B X)가 아니거나 오른쪽 단지에 해당합니다. 연산자.

토토 사이트 순위의 부정자는 동일한 왼쪽 및/또는 오른쪽을 가져야합니다. 오페라는 정의 할 연산자로서 유형이므로와 마찬가지로Commutator, 연산자 이름 만 에 필요합니다부정관절.

부정기 제공은 쿼리 토토 사이트 순위에 매우 도움이됩니다. 와 같은 표현을 허용하기 때문에NOT (x = 와이)단순화하려면x < 와이. 이것은 당신이 생각하는 것보다 더 자주 나타납니다.not운영을 a로 삽입 할 수 있습니다 다른 재 배열의 결과.

동일하게 사용하여 정의 할 수 있습니다. 정류자 쌍에 대해 위에서 설명한 방법.

34.13.3. 제한

the제한조항, 제공되는 경우, 제한 선택성 추정 함수의 이름을 지정합니다 연산자. (이것은 연산자가 아닌 함수 이름입니다. 이름.)제한클로즈 만 만들어집니다 반환되는 이진 연산자에 대한 감각부울. 제한 선택성의 아이디어 추정기는 테이블의 행의 일부가 만족여기서-Clase 조건 양식 :

컬럼 OP Constant

현재 연산자 및 특정 상수 값의 경우. 이것은 얼마나 많은지에 대한 아이디어를 제공함으로써 Optimizer를 지원합니다. 행은에 의해 제거됩니다.여기서이 양식을 가진 조항. (상수가 발생하면 어떻게됩니까? 왼쪽에서는 궁금할까요? 글쎄, 그것은 하나입니다 그 것들Commutator

새로운 제한 선택성 추정 기능 쓰기는 다음과 같습니다 이 장의 범위를 훨씬 뛰어 넘지 만 다행히도 일반적으로 시스템의 표준 추정기 중 하나를 사용하십시오. 많은 자신의 운영자. 이것들은 표준 제한입니다 추정기 :

eqselfor=
Neqselfor<
Scalarltselfor<또는<=
Scalargtselfor또는 =
이것들이 카테고리이지만 생각하면 이해가됩니다.=일반적으로 작은 만 허용됩니다 테이블의 줄의 일부;<일반적으로 작은 것만 거부합니다 분수.<분수를 수락합니다 그것은 주어진 상수가의 범위에서 떨어지는 곳에 따라 해당 테이블 열의 값은 에 의해 수집 된 정보분석및 선택성 추정기에 사용할 수 있습니다).<=약간 더 큰 비율을 허용합니다 보다<동일한 비교 일정하지만 가치가 없을 정도로 가깝습니다 특히 우리는 더 잘할 수 없기 때문에 구별됩니다 어쨌든 거친 추측보다. 비슷한 발언이 적용and =.

당신은 자주 사용하여 자주 도망 갈 수 있습니다eqsel또는neqsel선택성이 매우 높거나 매우 낮은 연산자, 심지어 그들이 실제로 평등이나 불평등이 아니라면. 예를 들어, 대략 평등 기하학적 토토 사이트 순위 사용eqsel일반적으로 그들이 할 것이라고 가정합니다 테이블의 항목의 작은 부분 만 일치합니다.

사용할 수 있습니다​​ScalarltselandScalargtsel비교 현명한 변환 ​​수단이있는 데이터 유형 범위 비교를위한 숫자 스칼라로. 가능하면 추가하십시오 함수에 의해 이해되는 데이터 유형convert_to_scalar ()insrc/backend/utils/adt/selfuncs.c. (결국, 이 기능은 데이터 당 유형의 함수로 대체해야합니다 열을 통해 식별PG_TYPE시스템 카탈로그; 그러나 그것은 그렇지 않았습니다 아직 일어났다.)이 작업을 수행하지 않으면 여전히 일이 작동합니다. 그러나 Optimizer의 추정치는 가능한 한 좋지 않을 것입니다. BE.

추가 선택성 추정 기능이 있습니다 기하학적 연산자를 위해 설계src/backend/utils/adt/geo_selfuncs.c: Aredel, PositionselContsel. 이 글에서 이것은 단지입니다 스터브이지만 사용하고 싶을 수도 있습니다 (또는 더 나은 개선 그들) 어쨌든.

34.13.4. Join

theJoin조항, 제공된 경우 이름 연산자의 결합 선택성 추정 기능. (메모 이것은 연산자 이름이 아닌 함수 이름입니다.)Join절은 이진에 대해서만 적합합니다 반환하는 토토 사이트 순위부울. 아이디어 결합 선택성 추정기 뒤에는 어떤 분수가 있는지 추측하는 것입니다. 한 쌍의 테이블에있는 행의 줄은 A를 만족시킬 것입니다여기서-양식의 클레스트 조건 :

표 1.column1 op table2.column2

현재 연산자의 경우. 와 마찬가지로제한절, 이것은 토토 사이트 순위에 도움이됩니다 실질적으로 몇 가지 중 어느 것을 알아 낼 수있게함으로써 가능한 조인 시퀀스는 최소한의 작업을 수행 할 가능성이 높습니다.

이전과 같이,이 장은 방법을 설명하려고 시도하지 않을 것입니다. 결합 선택성 추정기 기능을 작성하려면 표준 추정기 중 하나를 사용하는 경우 해당되는:

eqjoinselfor=
Neqjoinselfor<
scalarltjoinselfor<또는<=
Scalargtjoinselfor또는 =
AreaJoinsel2d 지역 기반 비교
PositionJoinsel2d 위치 기반 비교
contjoinsel2d 격리 기반 비교

34.13.5. 해시

the해시25115_25249해시이진 연산자에게만 적합합니다 반환부울및 실제로 운영자는 일부 데이터 유형 또는 쌍의 평등을 나타내야합니다. 데이터 유형의.

해시 조인의 기본 가정은 조인입니다 운영자는 왼쪽과 오른쪽 쌍에 대해서만 진실을 반환 할 수 있습니다. 동일한 해시 코드에 해시 값. 두 값을 넣으면 다른 해시 버킷에서 조인은 절대 비교하지 않습니다. 모두가 조인 연산자의 결과가 암시 적으로 거짓이어야합니다. 따라서 지정하는 것은 의미가 없습니다해시일부를 나타내지 않는 연산자 평등의 형태. 대부분의 경우 지원하기에만 실용적입니다 둘 다에서 동일한 데이터 유형을 취하는 연산자의 해싱 측면. 그러나 때로는 호환 가능한 디자인이 가능합니다 둘 이상의 데이터 유형에 대한 해시 기능; 즉, 기능입니다 그것은 동일한 해시 코드를 생성합니다"Equal"값은 값이 있지만 값입니다 다른 표현. 예를 들어, 상당히 간단합니다 다른 해시의 정수가 다른 속성을 정렬하십시오 너비.

표시 될해시, 가입 운영자는 해시 지수 운영자 제품군에 나타나야합니다. 이것은 물론 연산자를 만들 때 시행되지 않습니다. 참조 운영자 가족은 아직 존재할 수 없었습니다. 그러나 시도합니다 해시 조인의 연산자를 사용하면 실행 시간에 실패합니다. 운영자 가족이 존재합니다. 시스템은 운영자 제품군이 필요합니다 연산자의 데이터 유형 특이 적 해시 함수를 찾으십시오 입력 데이터 유형. 물론, 당신은 또한 적합한 것을 만들어야합니다 운영자 제품군을 만들기 전에 해시 기능.

해시 기능을 준비 할 때는주의를 기울여야합니다. 실패 할 수있는 기계에 따른 방법이 있기 때문에 옳은 일을하기 위해. 예를 들어, 데이터 유형이 a 인 경우 흥미롭지 않은 패드 비트가있을 수있는 구조, 당신 전체 구조를 단순히 전달할 수는 없습니다.hash_any. (다른 사람을 쓰지 않는 한 사용하지 않은 비트가 항상 0, 권장 전략입니다.) 또 다른 예를 들어를 충족하는 기계에서IEEE부동 소수점 표준, 음수 0 그리고 긍정적 인 0은 다른 값 (다른 비트 패턴)입니다. 그러나 그들은 동등한 비교로 정의됩니다. 플로트 값이 가능하다면 음수 제로를 포함하면 추가 단계가 필요합니다. 동일한 해시 값을 Positive Zero와 생성합니다.

해시 합의 가능한 연산자는 정류자가 있어야합니다 (자체 두 피연산자 데이터 유형은 동일하거나 관련 평등 동일하게 나타나는 연산자) 운영자 가족. 그렇지 않은 경우 플래너 오류가 발생할 수 있습니다 연산자가 사용될 때 발생합니다. 또한 좋은 생각입니다 (그러나 엄격하게 필요하지 않음) 지원하는 해시 운영자 제품군 모든 데이터 유형은 모든 평등 연산자를 제공합니다 데이터 유형의 조합; 이것은 더 나은 것을 허용합니다 최적화.

참고 :해시에 근본하는 함수 운영자는 불변하거나 안정적으로 표시되어야합니다. 그렇다면 휘발성, 시스템은 운영자를 사용하려고 시도하지 않습니다. 해시 가입.

참고 :해시에 접을 수있는 연산자가있는 경우 엄격하게 표시된 기본 함수, 기능 또한 완료해야합니다. 즉, 진실을 반환하거나 두 개의 비 unnull 입력에 대해 False, Necl, Null은 아닙니다. 이 규칙이라면 따르지 않음, 해시 최적화in운영은 잘못된 결과를 생성 할 수 있습니다. (구체적으로,in돌아올 수 있습니다 표준에 따른 정답 인 경우 거짓 무일하다; 또는이를 불평하는 오류가 발생할 수 있습니다 널 결과를 위해 준비되지 않았습니다.)

34.13.6. 병합

the병합절, 참석하는 경우, 시스템에 병합 결합을 사용하는 것이 허용되는 것을 알려줍니다. 이 연산자를 기반으로 결합 방법.병합이진 연산자에게만 적합합니다 반환부울및 실제로 운영자는 일부 데이터 유형 또는 쌍의 평등을 나타내야합니다. 데이터 유형의.

병합 조인 오른쪽 테이블을 순서대로 정리 한 다음 스캔합니다 평행한. 따라서 두 데이터 유형 모두 완전 할 수 있어야합니다. 순서, 조인 연산자는 에 떨어지는 값 쌍에 대해 성공하십시오."같은 장소"정렬 순서로. 실제로 이것 가입 연산자가 평등처럼 행동해야 함을 의미합니다. 그러나 그것은 두 가지 별개의 데이터 유형을 병합 할 수 있습니다. 그것들은 논리적으로 호환됩니다. 예를 들어,smallint-ersus-정수평등 연산자는 합병 가능합니다. 정렬 만 있으면됩니다 두 데이터 유형을 모두 논리적으로 가져올 연산자 호환 시퀀스.

표시 될병합, 가입 토토 사이트 순위는 Btree 지수의 평등 멤버로 나타납니다. 토토 사이트 순위 가족. 이것은 당신이 만들 때 시행되지 않습니다 물론 참조 토토 사이트 순위 제품군 이후 토토 사이트 순위 아직 존재할 수 없었습니다. 그러나 토토 사이트 순위는 실제로 사용되지 않습니다 일치하는 토토 사이트 순위 제품군을 찾을 수없는 한 합병 조인. 그만큼병합플래그는 힌트로 작용합니다 일치하는 연산자를 찾을 가치가있는 플래너 가족.

병합 합류 가능한 연산자는 정류자가 있어야합니다 (자체 두 피연산자 데이터 유형은 동일하거나 관련 평등 동일하게 나타나는 연산자) 운영자 가족. 그렇지 않은 경우 플래너 오류가 발생할 수 있습니다 연산자가 사용될 때 발생합니다. 또한 좋은 생각입니다 (그러나 Btree 운영자 가족에게는 엄격하게 필요하지 않습니다) 평등 연산자를 제공하기 위해 여러 데이터 유형을 지원합니다 데이터 유형의 모든 조합; 이것은 더 나은 것을 허용합니다 최적화.

참고 :병합 합류 가능한 기능 운영자는 불변하거나 안정적으로 표시되어야합니다. 그렇다면 휘발성, 시스템은 운영자를 사용하려고 시도하지 않습니다. 합병 조인.