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

11.3. 운영자 최적화 정보

저자:톰 레인 작성.

A 포스트그레SQL연산자 정의에는 다음을 알려주는 여러 선택적 절이 포함될 수 있습니다. 운영자의 행동 방식에 대한 시스템 유용한 정보. 이것들 조항은 필요할 때마다 제공되어야 합니다. 다음을 사용하는 쿼리 실행 속도가 상당히 향상됩니다. 운영자. 하지만 제공하는 경우에는 다음 사항을 확인해야 합니다. 맞아요! 최적화 절을 잘못 사용하면 다음과 같은 결과가 발생할 수 있습니다. 백엔드 충돌, 미묘하게 잘못된 출력 또는 기타 나쁜 것들. 너 확실하지 않은 경우 언제든지 최적화 조항을 생략할 수 있습니다. 그것에 대해; 유일한 결과는 쿼리 실행 속도가 느려질 수 있다는 것입니다. 필요 이상으로요.

추후에 추가 최적화 조항이 추가될 수 있습니다. 버전포스트그레SQL. 그들 여기에 설명된 내용은 7.3.21 릴리스의 모든 내용입니다. 이해합니다.

11.3.1. 정류기

커뮤테이터절(제공된 경우) 스포츠 토토 사이트의 정류자인 스포츠 토토 사이트의 이름을 지정합니다. 한정된. 스포츠 토토 사이트 A는 스포츠 토토 사이트 B의 정류자라고 합니다. 가능한 모든 입력 값 x, y에 대해 (x A y)가 (y B x)와 같은 경우. B는 A의 정류자이기도 합니다. 예를 들어, 스포츠 토토 사이트<그리고특정 데이터 유형의 경우 일반적으로 각각 다른 사람의 정류자 및 스포츠 토토 사이트+이다 일반적으로 그 자체로 교환 가능합니다. 하지만 스포츠 토토 사이트-일반적으로 어떤 것과도 교환 가능하지 않습니다.

전환된 연산자의 왼쪽 피연산자 유형은 다음과 같습니다. 정류자의 올바른 피연산자 유형, 그 반대의 경우. 그래서 정류자 연산자의 이름이 전부입니다.PostgreSQL조회하려면 제공되어야 합니다. 정류자가 제공되어야 하는 전부입니다.커뮤테이터절.

자체 교환 스포츠 토토 사이트를 정의할 때, 그것을 해라. 교환 스포츠 토토 사이트 쌍을 정의할 때, 상황은 조금 더 까다롭습니다. 첫 번째 사람이 어떻게 될 수 있습니까? 정의된 것은 아직 정의하지 않은 다른 것을 참조합니까? 이 문제에는 두 가지 해결책이 있습니다.

  • 한 가지 방법은 다음을 생략하는 것입니다.커뮤테이터첫 번째 연산자의 절 정의한 다음 두 번째 연산자에 하나를 제공합니다. 정의. 부터PostgreSQL교환 가능하다는 것을 알고 있습니다 스포츠 토토 사이트는 두 번째 정의를 볼 때 쌍으로 옵니다. 자동으로 돌아가서 누락된 부분을 채웁니다.커뮤테이터첫 번째 절 정의.

  • 다른 더 간단한 방법은 다음을 포함하는 것입니다.커뮤테이터둘 다의 절 정의. 언제PostgreSQL첫 번째 처리 정의하고 그것을 깨닫는다커뮤테이터존재하지 않는 것을 나타냅니다. 스포츠 토토 사이트, 시스템은 이에 대한 더미 항목을 만듭니다. 시스템 카탈로그의 연산자. 이 더미 항목은 왼쪽 및 오른쪽 연산자 이름에 대해서만 유효한 데이터 피연산자 유형 및 결과 유형이 전부입니다.PostgreSQL다음에서 추론할 수 있습니다. 이 점. 첫 번째 운영자의 카탈로그 항목은 다음으로 연결됩니다. 이 더미 항목. 나중에 두 번째를 정의할 때 연산자를 사용하면 시스템은 더미 항목을 다음과 같이 업데이트합니다. 두 번째 정의의 추가 정보. 당신이 채워지기 전에 더미 연산자를 사용해 보세요. 오류 메시지가 나타납니다. (참고: 이 절차는 안정적으로 작동하지 않습니다.PostgreSQL6.5 이전 버전이지만 이제는 작업을 수행하는 데 권장되는 방법입니다.)

11.3.2. 부정자

NEGATOR절(제공된 경우) 연산자의 부정인 연산자의 이름을 지정합니다. 한정된. 다음과 같은 경우 연산자 A는 연산자 B의 부정자라고 말합니다. 둘 다 부울 결과를 반환하고 (x A y)는 NOT (x B y)와 같습니다. 가능한 모든 입력 x, y. B는 또한 다음의 부정자임을 주목하세요. A. 예를 들어,<그리고=는 대부분의 데이터 유형에 대한 부정자 쌍입니다. 안 스포츠 토토 사이트는 자신의 부정자가 될 수 없습니다.

정류자와 달리 단항 스포츠 토토 사이트 쌍은 유효하게 사용할 수 있습니다. 서로의 부정자로 표시됩니다. 그것은 (A x)를 의미합니다 모든 x에 대해 NOT (B x) 또는 오른쪽 단항에 해당하는 것과 같습니다. 스포츠 토토 사이트.

스포츠 토토 사이트의 부정자는 왼쪽 및/또는 오른쪽이 동일해야 합니다 피스포츠 토토 사이트 유형은 스포츠 토토 사이트 자체이므로 with와 같습니다.커뮤테이터, 스포츠 토토 사이트 이름만 에 입력해야 합니다.NEGATOR절.

부정자를 제공하는 것은 쿼리 최적화 프로그램에 매우 도움이 됩니다 다음과 같은 표현을 허용하기 때문에아님 (x = 와이)x < y로 단순화됩니다. 이게 더 나오네요 당신이 생각하는 것보다 자주, 왜냐면아님작업은 결과적으로 삽입될 수 있습니다. 기타 재배치.

부정 스포츠 토토 사이트 쌍은 동일한 스포츠 토토 사이트를 사용하여 정의할 수 있습니다. 위에서 정류자 쌍에 대해 설명한 방법입니다.

11.3.3. 얽매다

제한절(제공된 경우) 에 대한 제한 선택성 추정 함수의 이름을 지정합니다. 연산자(이것은 연산자가 아닌 함수 이름입니다. 이름).제한절은 단지 반환하는 이항 스포츠 토토 사이트에 대한 의미부울. 제한 선택성의 이면에 있는 아이디어 추정기는 테이블의 행 중 몇 부분이 나올지 추측하는 것입니다. a를 만족시키다어디-절 조건 양식

열 OP 상수

현재 연산자 및 특정 상수 값에 대해. 이는 최적화 프로그램이 얼마나 많은지에 대한 아이디어를 제공함으로써 도움을 줍니다. 행은 다음에 의해 제거됩니다.어디이 형식을 갖는 절입니다. (상수가 다음과 같으면 어떻게 될까요? 왼쪽, 궁금하시죠? 글쎄, 그게 그 중 하나야 그런 것들커뮤테이터다음을 위한 것입니다...)

새로운 제한 선택성 추정 함수를 작성하는 것은 이 장의 범위를 훨씬 벗어나지만 다행히도 일반적으로 시스템의 표준 추정기 중 하나를 사용합니다. 당신의 많은 운영자. 이는 표준 제한사항입니다. 추정자:

eqselfor=
네크셀for<
scalarltselfor<또는<=
scalargtselfor또는=
이것이 다음과 같다는 것은 조금 이상해 보일 수도 있습니다. 카테고리로 분류되어 있지만 생각해 보면 의미가 있습니다.=일반적으로 작은 금액만 허용됩니다. 테이블의 행 비율;<일반적으로 작은 항목만 거부합니다. 분수.<분수를 받아들입니다 이는 주어진 상수가 범위에 속하는 위치에 따라 달라집니다. 해당 테이블 열의 값(이것은 우연히 발생합니다. 수집된 정보분석그리고 선택성 추정기에 사용할 수 있음).<=약간 더 큰 분수를 허용합니다 보다<같은 비교를 위해 일정하지만 가치가 없을 정도로 가깝습니다. 특히 우리가 더 잘할 가능성이 없기 때문에 구별됩니다. 어쨌든 대략적인 추측보다. 유사한 설명이 다음에 적용됩니다.그리고=.

둘 중 하나를 사용하면 자주 벗어날 수 있습니다.eqsel또는네크셀선택성이 매우 높거나 매우 낮은 스포츠 토토 사이트의 경우 그것이 실제로 평등도 불평등도 아닌 경우. 예를 들어, 근사 평등 기하학 스포츠 토토 사이트 사용eqsel그들은 일반적으로 테이블에 있는 항목 중 작은 부분만 일치합니다.

당신은 사용할 수 있습니다scalarltsel그리고scalargtsel비교용 변환할 수 있는 합리적인 수단이 있는 데이터 유형 범위 비교를 위해 숫자 스칼라로 변환합니다. 가능하다면 추가하세요. 루틴이 이해하는 데이터 유형convert_to_scalar()insrc/backend/utils/adt/selfuncs.c. (결국, 이 루틴은 데이터 유형별 함수로 대체되어야 합니다. 의 열을 통해 식별됩니다.pg_type시스템 카탈로그; 하지만 그건 그렇지 않았어 아직 일이 발생하지 않았습니다.) 이렇게 하지 않으면 문제가 계속 발생합니다. 하지만 옵티마이저의 추정치는 가능한 한 좋지 않을 것입니다. BE.

다음을 위해 설계된 추가 선택 기능이 있습니다. 기하 연산자src/backend/utils/adt/geo_selfuncs.c: areasel, positionsel콘셀. 이 글을 쓰는 시점에서 이것들은 단지 스텁을 사용하고 싶을 수도 있습니다(또는 더 나은 방법으로 개선). 그들) 어쨌든.

11.3.4. 가입하다

가입절, 제공된 경우 이름 스포츠 토토 사이트에 대한 조인 선택성 추정 함수(참고 이는 스포츠 토토 사이트 이름이 아닌 함수 이름입니다.)가입절은 바이너리에만 의미가 있습니다. 반환하는 스포츠 토토 사이트부울. 아이디어 조인 선택성 추정기 뒤에 있는 것은 몇 분의 1인지 추측하는 것입니다. 한 쌍의 테이블에 있는 행 중 다음을 만족합니다.어디-양식의 절 조건

table1.column1 OP table2.column2

현재 연산자에 대한 것입니다. 와 마찬가지로제한절, 이는 최적화 프로그램에 매우 도움이 됩니다. 실질적으로 여러 가지 중 어느 것이 무엇인지 파악하게 함으로써 가능한 조인 시퀀스는 최소한의 작업이 소요될 가능성이 높습니다.

이전과 마찬가지로 이 장에서는 방법을 설명하지 않을 것입니다. 조인 선택성 추정 함수를 작성하려면 다음과 같은 경우 표준 추정기 중 하나를 사용하는 것이 좋습니다. 해당되는:

eqjoinselfor=
neqjoinselfor<
scalarltjoinselfor<또는<=
scalargtjoinselfor또는=
areajoinsel23321_23363
positionjoinsel23454_23500
contjoinsel23587_23636

11.3.5. 해시

해시절이 있는 경우, 해시 조인을 사용하는 것이 허용된다는 것을 시스템에 알려줍니다. 이 연산자를 기반으로 하는 조인 방법입니다.해시이진 스포츠 토토 사이트에만 의미가 있습니다. 그 반환부울, 실제로는 스포츠 토토 사이트는 일부 데이터 유형에 대해 동등해야 합니다.

해시 조인의 기본 가정은 조인이 연산자는 왼쪽과 오른쪽 쌍에 대해서만 true를 반환할 수 있습니다. 동일한 해시 코드로 해시되는 값입니다. 두 값을 넣으면 다른 해시 버킷에서 조인은 절대 비교하지 않습니다. 모두, 조인 연산자의 결과를 암시적으로 가정합니다. 거짓이어야 합니다. 따라서 지정하는 것은 결코 의미가 없습니다.해시표현하지 않는 스포츠 토토 사이트의 경우 평등.

사실 논리적 평등도 충분하지 않습니다. 그만큼 연산자는 순수한 비트 동등성을 더 잘 표현해야 합니다. 왜냐하면 해시 함수는 메모리 표현에서 계산됩니다. 비트의 의미에 관계없이 값의 의미입니다. 예를 들어, 시간 간격의 동일성은 비트별 동일성이 아닙니다. 그만큼 간격 동등 연산자는 두 시간 간격이 동일한 것으로 간주합니다. 끝점 여부에 관계없이 기간이 동일한 경우 동일합니다. 이것이 의미하는 바는 다음을 사용하는 조인입니다.=간격 필드 사이에서 결과가 달라집니다 구현된 경우보다 해시 조인으로 구현된 경우의 결과 다른 방법으로는, 쌍의 상당 부분이 일치 항목은 다른 값으로 해시되며 절대 비교되지 않습니다. 해시 조인으로. 그러나 최적화 프로그램이 다른 방법을 사용하기로 선택한 경우 일종의 조인, 동등 연산자가 말하는 모든 쌍은 다음과 같습니다. 동등하게 발견될 것입니다. 우리는 그런 모순을 원하지 않습니다. 따라서 간격 동일성을 해시 가능으로 표시하지 않습니다.

해시 조인을 수행하는 기계 의존적인 방법도 있습니다 옳은 일을 하지 못할 수도 있습니다. 예를 들어, 귀하의 데이터가 타입은 재미없는 패드가 있을 수 있는 구조입니다 비트, 같음 연산자를 표시하는 것은 안전하지 않습니다.해시. (아마도 당신이 다른 글을 쓰지 않는 한 사용되지 않은 비트가 항상 0이 되도록 보장하는 연산자입니다.) 또 다른 예는 부동 소수점 데이터 유형이 해시 조인에는 안전하지 않습니다. 다음을 충족하는 머신에서IEEE부동 소수점 표준, 마이너스 0과 플러스 0은 다른 값입니다. (다른 비트 패턴) 그러나 동일함을 비교하기 위해 정의됩니다. 따라서 부동 소수점 데이터 유형의 항등 연산자가 다음과 같은 경우 두드러진해시, 마이너스 0과 플러스 0은 아마도 해시 조인과 일치하지 않을 것입니다. 다른 가입 프로세스와 일치하게 됩니다.

결론은 아마도 다음과 같이 사용해야 한다는 것입니다.해시항등 연산자의 경우 (또는 구현될 수 있음)memcmp().

11.3.6. 병합 (정렬1, SORT2, LTCMP, GTCMP)

병합절이 있는 경우, 병합 조인을 사용하는 것이 허용됨을 시스템에 알립니다. 이 연산자를 기반으로 한 조인 방법입니다.병합이진 스포츠 토토 사이트에만 의미가 있습니다. 그 반환부울, 실제로는 스포츠 토토 사이트는 일부 데이터 유형이나 쌍에 대해 동일성을 나타내야 합니다. 데이터 유형입니다.

병합 조인은 왼쪽 및 오른쪽 정렬 아이디어를 기반으로 합니다. 오른쪽 테이블을 순서대로 정렬한 다음 스캔합니다. 평행한. 따라서 두 데이터 유형 모두 완전히 가능해야 합니다. 순서가 지정되어 있으며 조인 연산자는 다음과 같은 연산자만 사용할 수 있어야 합니다. 다음에 해당하는 값 쌍에 대해 성공합니다."같은 장소"정렬 순서로. 실제로는 이 이는 조인 연산자가 동등하게 동작해야 함을 의미합니다. 하지만 왼쪽 및 오른쪽 데이터 유형이 있었던 해시 조인과 달리 같거나 적어도 비트 단위로 동등한 것이 더 좋습니다. 두 개의 서로 다른 데이터 유형을 병합 조인하는 것이 가능합니다. 논리적으로 호환됩니다. 예를 들어,int2-대-int4평등 연산자는 병합 조인이 가능합니다. 우리는 정렬 연산자만 필요합니다. 두 데이터 유형을 모두 논리적으로 호환되는 형태로 가져옵니다. 순서.

병합 조인을 실행하려면 시스템이 다음을 수행할 수 있어야 합니다. 병합-조인 동등성과 관련된 4개의 연산자를 식별합니다. 연산자: 왼쪽 입력 데이터 유형에 대한 작음 비교, 올바른 입력 데이터 유형에 대한 비교, 미만 두 데이터 유형 간의 비교 및 ​​보다 큼 두 데이터 유형 간의 비교. (실제로는 4개입니다. 병합 조인 가능 연산자가 두 개인 경우 고유 연산자 다양한 입력 데이터 유형; 하지만 입력 유형이 세 개의 작음 연산자는 모두 동일한 연산자입니다.) 이러한 연산자를 이름별로 개별적으로 지정할 수 있습니다. 으로정렬1, SORT2, LTCMPGTCMP29244_29315<, <, <, 각각 다음 중 하나라도 해당된다면 생략된 경우병합지정되었습니다. 또한,병합다음으로 가정됩니다 이 네 가지 연산자 옵션 중 하나라도 나타나면 암시됩니다. 그 중 일부만 지정하고 시스템이 채우도록 할 수 있음 나머지는.

네 가지 비교 연산자의 입력 데이터 유형은 다음과 같습니다. 병합 조인 가능 연산자의 입력 유형에서 추론되므로 마찬가지로COMMUTATOR, 오직 이 절에는 스포츠 토토 사이트 이름이 제공되어야 합니다. 당신이 아니라면 독특한 스포츠 토토 사이트 이름을 선택하는 것만으로도 충분합니다. 쓰다병합그리고 시스템이 채워지도록 놔두세요 세부 사항에서. (와 마찬가지로커뮤테이터그리고NEGATOR, 시스템은 다음을 수행할 수 있습니다. 우연히 정의한 경우 더미 연산자 항목을 만듭니다. 다른 연산자보다 먼저 항등 연산자를 사용합니다.)

표시한 연산자에는 추가 제한사항이 있습니다. 병합 조인 가능. 이러한 제한 사항은 현재 확인되지 않습니다.스포츠 토토 사이트 생성, 하지만 오류가 발생할 수 있습니다. 스포츠 토토 사이트가 사용될 때 true가 아닌 경우:

  • 병합 조인이 가능한 동등 연산자에는 다음이 있어야 합니다. 병합 결합 가능 정류자(두 데이터 유형이 다음과 같은 경우 자체) 동일하거나 관련된 항등 연산자 다른).

  • 둘 중 하나와 관련된 병합 조인 가능한 연산자가 있는 경우 데이터 유형 A와 B, 또 다른 병합 조인 가능 연산자 B를 세 번째 데이터 유형 C와 연관시키면 A와 C도 다음과 같아야 합니다. 병합 조인 가능한 연산자가 있습니다. 즉, 병합 조인 가능 연산자는 전이적이어야 합니다.

  • 네 가지 경우 런타임 시 기괴한 결과가 발생할 것입니다. 사용자가 명명한 비교 스포츠 토토 사이트는 데이터 값을 정렬하지 않습니다. 호환 가능합니다.

참고:포스트그레SQL7.3 이전 버전,병합속기는 그렇지 않았습니다. available: 병합 조인이 가능한 연산자를 만들려면 둘 다 쓰세요정렬1그리고정렬2명시적으로. 또한,LTCMP그리고GTCMP옵션이 존재하지 않았습니다. 그 운영자의 이름은 다음과 같습니다 다음과 같이 하드와이어됨<그리고각각.