무지개 토토 생성이름( 절차 =func_name[, LEFTARG =왼쪽형] [, RIGHTARG =righttype]
[, 정류자 =com_op] [, NEGATOR =neg_op]
[, 제한 =res_proc] [, JOIN =join_proc]
[, 해시 ] [, SORT1 =left_sort_op] [, SORT2 =right_sort_op ] )
정의할 무지개 토토입니다. 허용되는 내용은 아래를 참조하세요. 문자.
이 무지개 토토를 구현하는 데 사용되는 함수입니다.
무지개 토토의 왼쪽 인수 유형(인 경우) 어떤. 이 옵션은 왼쪽 단항의 경우 생략됩니다. 무지개 토토.
무지개 토토의 오른쪽 인수 유형, 있다면. 이 옵션은 오른쪽 단항의 경우 생략됩니다. 무지개 토토.
이 무지개 토토의 정류자.
이 무지개 토토의 부정자입니다.
다음에 대한 제한 선택성 추정 기능 이 연산자.
이를 위한 조인 선택 추정기 기능 무지개 토토.
이 연산자가 해시 조인을 지원할 수 있음을 나타냅니다.
이 연산자가 병합 조인을 지원할 수 있는 경우, 이것의 왼쪽 데이터 유형을 정렬하는 연산자 연산자.
이 연산자가 병합 조인을 지원할 수 있는 경우, 오른쪽 데이터 유형을 정렬하는 연산자 연산자.
무지개 토토 생성새 무지개 토토를 정의합니다.이름. 정의하는 사용자 운영자가 소유자가 됩니다.
운영자이름은 최대 순서NAMEDATALEN-1 (31 기본값) 다음 목록의 문자:
+ - * / < = ~ ! @ # % ^ & | ` ? $
$은(는) 다음으로 정의될 수 없습니다. 단일 문자 연산자(단일 문자 연산자의 일부일 수 있음) 다중 문자 연산자 이름.
--그리고/*연산자 이름 어디에도 나타날 수 없습니다. 댓글의 시작으로 간주되기 때문입니다.
다중 문자 연산자 이름은 다음으로 끝날 수 없습니다.+또는-, 이름에는 다음 문자 중 하나 이상이 포함됩니다.
~ ! @ # % ^ & | ` ? $
참고:비SQL 표준 연산자로 작업할 때 이름을 사용하는 경우 일반적으로 인접한 연산자를 구분해야 합니다. 모호함을 피하기 위해 공백을 사용합니다. 예를 들어 다음과 같은 경우 라는 왼쪽 단항 연산자를 정의했습니다.@, 쓸 수 없습니다.X*@Y; 당신은 작성해야합니다X* @Y이를 보장하기 위해PostgreSQL두 개의 연산자로 읽습니다. 이름이 하나도 없습니다.
운영자!=다음에 매핑됨<입력 시, 이 두 이름은 항상 동일합니다.
LEFTARG 및 RIGHTARG 중 최소한 하나는 정의되어야 합니다. 에 대한 이진 무지개 토토는 둘 다 정의해야 합니다. 오른쪽 단항의 경우 무지개 토토의 경우 LEFTARG만 정의해야 하며 왼쪽 단항의 경우 무지개 토토는 RIGHTARG만 정의해야 합니다.
그func_name절차를 수행해야 합니다. 이전에 다음을 사용하여 정의되었습니다.만들기 기능그리고 올바른 수의 수를 허용하도록 정의되어야 합니다. 표시된 유형의 인수(1개 또는 2개)입니다.
정류자 무지개 토토가 존재하는 경우 이를 식별해야 하므로 그PostgreSQL반전할 수 있습니다. 원하는 경우 피연산자의 순서입니다. 예를 들어, 운영자 보다 작은 면적, <<<, 아마도 정류자가 있을 것입니다. 연산자,보다 큰 영역, . 따라서 쿼리는 최적화 프로그램은 다음을 자유롭게 변환할 수 있습니다.
상자 '((0,0), (1,1))' MYBOXES.description
에
MYBOXES.description <<< 상자 '((0,0), (1,1))'
이것은 실행 코드가 항상 후자를 사용하도록 허용합니다 쿼리 최적화 프로그램을 표현하고 단순화합니다.
마찬가지로 부정 연산자가 있는 경우 다음과 같아야 합니다. 확인되었습니다. 다음과 같이 면적이 같음 연산자 ===가 존재한다고 가정합니다. 면적이 동일하지 않은 경우, !==. 부정자 링크는 쿼리를 허용합니다 단순화를 위한 최적화 프로그램
NOT MYBOXES.description === 상자 '((0,0), (1,1))'
에
MYBOXES.description !== 상자 '((0,0), (1,1))'
정류자 연산자 이름이 제공되면,포스트그레SQL카탈로그에서 검색합니다. 발견되었지만 아직 정류자 자체가 없는 경우 정류자의 항목은 새로 생성되도록 업데이트됩니다. 연산자를 정류자로 사용합니다. 이는 부정자에게도 적용됩니다. 이는 두 연산자의 정의를 허용하기 위한 것입니다. 정류자 또는 서로의 부정자. 첫 번째 연산자 정류자나 부정자 없이 정의되어야 합니다(예: 해당). 두 번째 연산자가 정의되면 첫 번째 연산자의 이름을 지정합니다. 정류자 또는 부정자로. 첫 번째는 측면으로 업데이트됩니다 효과. (현재)PostgreSQL 6.5, 둘 다 갖는 것도 가능합니다. 무지개 토토는 서로를 참조합니다.)
HASHES, SORT1 및 SORT2 옵션이 지원됩니다. 조인을 수행하는 쿼리 최적화 프로그램입니다.포스트그레SQL항상 조인을 평가할 수 있습니다(예: 로 구분된 두 개의 튜플 변수가 있는 절 처리 를 반환하는 무지개 토토부울) 작성자 반복 대체 [WONG76]. 게다가PostgreSQL해시 조인 알고리즘을 사용할 수 있습니다. [SHAP86] 라인을 따라; 그러나 이것이 사실인지 알아야 합니다. 전략이 적용 가능합니다. 현재 해시 조인 알고리즘은 동등성 테스트를 나타내는 연산자에 적합합니다. 더욱이, 데이터 유형이 동일하다는 것은 비트 단위 동일을 의미해야 합니다. 유형의 표현. (예를 들어, 다음과 같은 데이터 유형 동등성 테스트에 중요하지 않은 사용되지 않은 비트가 포함되어 있을 수 있습니다. 해시 조인되지 않아야 합니다.) HASHES 플래그는 쿼리를 나타냅니다. 해시 조인을 안전하게 사용할 수 있는 최적화 프로그램 연산자.
마찬가지로 두 개의 정렬 무지개 토토는 쿼리에 표시됩니다 병합 정렬이 사용 가능한 조인 전략인지 여부와 어떤 것이 있는지 최적화합니다. 두 피무지개 토토 클래스를 정렬하려면 무지개 토토를 사용해야 합니다. 정렬 무지개 토토는 항등 무지개 토토에만 제공되어야 하며, 왼쪽과 오른쪽에 대해 작음 무지개 토토를 참조해야 합니다. 각각 측면 데이터 유형입니다.
다른 조인 전략이 실용적이라고 판단되면,PostgreSQL변경됩니다 이를 사용하려면 최적화 프로그램과 런타임 시스템이 필요합니다. 연산자 정의 시 추가 사양입니다. 다행스럽게도 연구 커뮤니티는 새로운 조인 전략을 고안했습니다. 드물게 사용자 정의 조인의 일반성이 추가되었습니다. 전략은 관련된 복잡성만큼 가치가 있다고 느껴지지 않았습니다.
RESTRICT 및 JOIN 옵션은 쿼리 최적화 프로그램을 지원합니다. 결과 크기 추정. 다음 형식의 절인 경우:
MYBOXES.description <<< 상자 '((0,0), (1,1))'
조건에 존재하는 경우포스트그레SQL분수를 추정해야 할 수도 있습니다. 조항을 만족하는 MYBOXES의 인스턴스 중 하나입니다. 함수res_proc등록되어 있어야 합니다 함수(이미 다음을 사용하여 정의되었음을 의미함)함수 생성)는 다음의 인수를 허용합니다. 데이터 유형을 수정하고 부동 소수점 숫자를 반환합니다. 쿼리 옵티마이저는 단순히 이 함수를 호출하고 매개변수를 전달합니다.((0,0), (1,1))그리고 결과를 곱합니다 관계 크기를 기준으로 예상 인스턴스 수를 얻습니다.
마찬가지로, 연산자의 피연산자 둘 다에 다음이 포함된 경우 인스턴스 변수의 경우 쿼리 최적화 프로그램은 인스턴스 변수의 크기를 추정해야 합니다. 결과 조인. Join_proc 함수는 다른 것을 반환합니다. 부동소수점 수 예상 계산에 관련된 두 테이블의 카디널리티 결과 크기.
함수 간의 차이점
my_procedure_1 (MYBOXES.description, 상자 '((0,0), (1,1))')
그리고 운영자
MYBOXES.description === 상자 '((0,0), (1,1))'
그렇군요PostgreSQL시도 무지개 토토를 최적화하고 인덱스를 사용하여 제한하기로 결정할 수 있습니다. 무지개 토토가 포함될 때 검색 공간. 그러나 기능을 최적화하려는 시도가 없으며 무차별적으로 수행됩니다. 힘. 게다가 함수는 인수를 얼마든지 가질 수 있지만 무지개 토토는 1~2개로 제한됩니다.