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

35.13. 토토 사이트 순위 최적화 정보

apostgresql토토 사이트 순위 정의에는 시스템에 작동 방식에 대한 유용한 내용을 알려주는 몇 가지 선택 조항이 포함될 수 있습니다. 이 조항은 연산자를 사용하는 쿼리를 실행할 때 상당한 속도를 높일 수 있기 때문에 적절할 때마다 제공되어야합니다.

추가 최적화 조항이 향후 버전의에 추가 될 수 있습니다.PostgreSQL. 여기에 설명 된 것들은 9.5.25 릴리스를 이해하는 모든 것입니다.

35.13.1. Commutator

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

정류 가능한 연산자의 왼쪽 피연산자 유형은 정류자의 오른쪽 피연산자 유형과 동일하며 그 반대도 마찬가지입니다. 그래서 정류자 토토 사이트 순위의 이름이 그 모든 것입니다PostgreSQL정류자를 찾기 위해 제공되어야합니다.Commutator조항

인덱스에 사용될 연산자에게 통근자 정보를 제공하는 것이 중요합니다."Flip Around"다른 계획 유형에 필요한 양식에 대한 그러한 조항. 예를 들어, where 절이있는 쿼리를 고려하십시오.tab1.x = tab2.y, 여기서tab1.x13123_13130tab2.y사용자 정의 유형이며tab2.y색인이 표시됩니다. Optimizer는 조항을 뒤집는 방법을 결정할 수 없다면 인덱스 스캔을 생성 할 수 없습니다.tab2.y = tab1.x, 인덱스 스캔 기계는 토토 사이트 순위의 왼쪽에 인덱스 된 열이 표시되기 때문에..PostgreSQLWillnot이것이 유효한 변형이라고 가정합니다.=토토 사이트 순위는 토토 사이트 순위에게 통근자 정보를 표시하여 유효하다는 것을 지정해야합니다.

자체 응고 연산자를 정의 할 때는 그냥 그렇게합니다. 한 쌍의 정류 연산자를 정의 할 때는 상황이 조금 까다로워집니다. 어떻게 정의 될 첫 번째는 어떻게 다른 하나를 언급 할 수 있습니까?

  • 한 가지 방법은를 생략하는 것입니다.Commutator정의 한 첫 번째 연산자의 조항을 정의한 다음 두 번째 연산자의 정의에서 제공합니다. 부터PostgreSQL정류 연산자가 쌍으로 나오는 것을 알고 있습니다. 두 번째 정의를 볼 때 자동으로 돌아가 누락 된 것을 채우게됩니다Commutator첫 번째 정의의 조항.

  • 더 간단한 방법은 단지 포함하는 것입니다Commutator두 정의의 조항. 언제PostgreSQL첫 번째 정의를 처리하고Commutator존재하지 않는 연산자를 말하면 시스템은 시스템 카탈로그에서 해당 연산자에게 더미 입력을 만듭니다. 이 더미 항목은 토토 사이트 순위 이름, 왼쪽 및 오른쪽 피연산자 유형 및 결과 유형에 대해서만 유효한 데이터를 갖습니다.Postgresql이 시점에서 추론 할 수 있습니다. 첫 번째 토토 사이트 순위의 카탈로그 항목은이 더미 항목에 연결됩니다.

35.13.2. 부정관

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

정류자와 달리 한 쌍의 단독 운영자는 서로의 부정관으로 유효하게 표시 될 수 있습니다. 즉, (a x)는 모든 x에 대해 (b x)가 아니거나 오른쪽 단지 연산자와 동일하지 않습니다.

토토 사이트 순위의 부정자는 정의 할 연산자와 동일한 왼쪽 및/또는 오른쪽 피연산자 유형을 가져야합니다.Commutator부정관절.

부정기를 제공하는 것은 쿼리 최적화에 매우 도움이됩니다.NOT (x = y)단순화하려면x < y16672_16731not다른 재 배열의 결과로 작업을 삽입 할 수 있습니다.

부정적인 연산자 쌍 위에서 설명한 동일한 방법을 사용하여 정의 할 수 있습니다.

35.13.3. 제한

the제한조항이 제공된 경우 조작자에 대한 제한 선택성 추정 함수의 이름을 지정합니다. (이것은 연산자 이름이 아닌 함수 이름입니다.)제한클로즈는 반환되는 이진 연산자에게만 적합합니다부울. 제한 선택성 추정기의 배후에있는 아이디어는 테이블의 행의 일부가 A를 만족시킬 것인지 추측하는 것입니다.여기서-양식의 클레드 조건 :

열 상수

현재 연산자 및 특정 상수 값의 경우. 이것은옵니다.여기서이 양식을 가진 조항. (상수가 왼쪽에 있다면 어떻게 될까요? 궁금 할 것입니다. 글쎄요CommutatorIS for ...)

새로운 제한 선택성 추정 기능 작성은이 장의 범위를 훨씬 능가하지만 다행히도 일반적으로 많은 자신의 운영자에게 시스템의 표준 추정기 중 하나를 사용할 수 있습니다. 표준 제한 추정기입니다.

eqselfor=
neqselfor<
Scalarltselfor<또는<=
Scalargtselfor또는 =
이것이 범주라는 것이 조금 이상하게 보일지 모르지만, 그것에 대해 생각하면 의미가 있습니다.=일반적으로 테이블의 줄의 작은 부분 만 허용합니다.<일반적으로 작은 분수 만 거부합니다.<주어진 상수가 해당 테이블 열의 값 범위에서 떨어지는 부분에 따라 달라지는 분수를 수락합니다 (이런 일이 발생합니다.분석그리고 선택성 추정기에 사용할 수있게 해줍니다).<=보다 약간 더 큰 분수를 받아 들일 것입니다<동일한 비교 상수의 경우, 특히 우리는 거친 추측보다 더 잘할 수 없기 때문에 구별 할 가치가 없을 정도로 가깝습니다. 비슷한 발언이 적용and =.

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

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

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

35.13.4. Join

theJoin조항이 제공되는 경우 조작자의 조인 선택성 추정 함수의 이름을 지정합니다. (이것은 연산자 이름이 아닌 함수 이름입니다.)Join클로즈는 반환되는 이진 연산자에게만 적합합니다부울. 결합 선택성 추정기의 아이디어는 한 쌍의 테이블의 행의 일부가 A를 만족시킬 것인지 추측하는 것입니다.여기서-양식의 클레스트 조건 :

표 1.column1 op table2.column2

현재 연산자의 경우. 와 마찬가지로제한절, 이것은 가능한 몇 가지 가능한 조인 시퀀스 중 어느 것이 가장 적은 작업을 수행 할 수 있는지 알아 내면 최적화를 실질적으로 매우 실질적으로 도울 수 있습니다.

이전과 마찬가지로,이 장에서는 결합 선택성 추정기 기능을 작성하는 방법을 설명하려고 시도하지 않지만 적용 가능한 경우 표준 추정기 중 하나를 사용하는 것이 좋습니다..

eqjoinselfor=
Neqjoinselfor<
scalarltjoinselfor<또는<=
Scalargtjoinselfor또는 =
AreaJoinsel2D 지역 기반 비교 용
PositionJoinsel2D 위치 기반 비교 용
contjoinsel23033_23072

35.13.5. 해시

the해시절은 현재 존재하는 경우 시스템에 해시 조인 메소드를 사용하는 것이 허용되는 것을 알려줍니다.해시반환하는 이진 연산자에게만 적합합니다부울, 그리고 실제로 운영자는 일부 데이터 유형 또는 데이터 유형 쌍의 평등을 나타내야합니다.

해시 조인의 기본 가정은 조인 연산자가 동일한 해시 코드에 해시하는 왼쪽 및 오른쪽 값 쌍에 대해서만 true를 반환 할 수 있다는 것입니다. 두 값이 다른 해시 버킷에 넣는 경우 조인 연산자의 결과가 거짓이어야한다고 가정하면, 조인은 전혀 비교하지 않습니다.해시어떤 형태의 평등을 나타내지 않는 운영자. 대부분의 경우 양쪽에서 동일한 데이터 유형을 취하는 연산자의 해싱을 지원하는 것은 실용적입니다."Equal"값은 다른 표현을 가지고 있지만 값. 예를 들어, 다른 너비의 해시를 해싱 할 때이 속성을 배열하는 것은 상당히 간단합니다.

표시 될해시, 가입 연산자는 해시 지수 운영자 제품군에 나타나야합니다. 물론 참조 연산자 제품군은 아직 존재할 수 없었기 때문에 연산자를 만들 때 시행되지 않습니다.

해시 기능을 준비 할 때는 치료를해야합니다. 옳은 일을하지 못하는 기계에 의존하는 방법이 있기 때문입니다. 예를 들어, 데이터 유형이 흥미롭지 않은 패드 비트가있을 수있는 구조 인 경우 전체 구조를 간단히 전달할 수는 없습니다.hash_any. (다른 토토 사이트 순위와 기능을 작성하지 않으면 사용하지 않은 비트가 항상 0이되도록 권장되는 전략입니다.) 또 다른 예는를 충족하는 기계에서입니다.IEEE플로팅 포인트 표준, 음수 0 및 양수 0은 다른 값 (다른 비트 패턴)이지만 동일하게 비교하도록 정의됩니다. 플로트 값에 음수 0이 포함될 수있는 경우, 동일한 해시 값을 양수 0과 생성하기 위해 추가 단계가 필요합니다.

해시 합의 가능한 연산자는 동일한 운영자 제품군에 나타나는 두 개의 피연산자 데이터 유형이 동일하거나 관련 평등 연산자 자체가 정류자가 있어야합니다. 그렇지 않은 경우 작업자가 사용될 때 플래너 오류가 발생할 수 있습니다.

참고 :해시-접합 가능한 연산자의 기본 기능은 불변 또는 안정적으로 표시되어야합니다. 휘발성이면 시스템은 해시 조인에 연산자를 사용하려고 시도하지 않습니다.

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

35.13.6. 병합

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

병합 조인은 왼쪽 및 오른쪽 테이블을 순서대로 정렬 한 다음 병렬로 스캔하는 아이디어를 기반으로합니다. 따라서 두 데이터 유형 모두 완전히 주문할 수 있어야하며 조인 연산자는에 해당하는 값 쌍에 대해서만 성공할 수있는 조인 연산자 여야합니다."같은 장소"정렬 순서로. 실제로 이것은 조인 연산자가 평등처럼 행동해야 함을 의미합니다.smallint-ersus-Integer평등 연산자는 합병 가능합니다. 우리는 두 데이터 유형을 모두 논리적으로 호환 가능한 순서로 가져 오는 정렬 연산자 만 필요합니다.

표시 될병합, 가입 연산자는 A의 평등 멤버로 나타나야합니다btree색인 토토 사이트 순위 패밀리. 물론 참조 연산자 제품군은 아직 존재할 수 없었기 때문에 연산자를 만들 때 시행되지 않습니다.병합플래그는 일치하는 토토 사이트 순위 패밀리를 찾고 있다는 플래너에게 힌트 역할을합니다.

병합 가능한 연산자는 동일한 운영자 제품군에 나타나는 두 개의 피연산자 데이터 유형이 동일하거나 관련 평등 연산자가 동일하거나 관련 평등 연산자 자체가 있어야합니다. 그렇지 않은 경우 작업자가 사용될 때 플래너 오류가 발생할 수 있습니다.btree다중 데이터 유형을 지원하여 데이터 유형의 모든 조합에 대한 평등 연산자를 제공하는 운영자 제품군; 이것은 더 나은 최적화를 허용합니다.

참고 :병합 가능한 연산자의 기본 함수는 불변 또는 안정적으로 표시되어야합니다. 휘발성이면 시스템은 합병 조인에 연산자를 사용하지 않습니다..