38.11. 함수 최적화 정보#

기본적으로 함수는 단지블랙박스데이터베이스 시스템은 동작에 대해 거의 알지 못합니다. 그러나 이는 함수를 사용하는 쿼리가 실제보다 훨씬 덜 효율적으로 실행될 수 있음을 의미합니다. 플래너가 함수 호출을 최적화하는 데 도움이 되는 추가 지식을 제공할 수 있습니다.

일부 기본 사실은 다음에 제공된 선언적 주석을 통해 제공될 수 있습니다.함수 생성명령. 이들 중 가장 중요한 것은 함수의PostgreSQL : 문서 : 16 : 38.7. 사설 토토 변동성 범주 (불변, 안정적또는휘발성); 함수를 정의할 때 이를 올바르게 지정하도록 항상 주의해야 합니다. 병렬 안전 속성(병렬 안전하지 않음, 병렬 제한됨또는병렬 안전8776_9135

A를 부착하는 것도 가능합니다.플래너 지원 기능SQL 호출 가능 함수(라고 함)타겟 함수), 이를 통해 선언적으로 표현하기에는 너무 복잡한 대상 함수에 대한 지식을 제공합니다. Planner 지원 기능은 C로 작성되어야 하므로(대상 기능은 그렇지 않을 수도 있음) 상대적으로 소수의 사람들이 사용하는 고급 기능입니다.

플래너 지원 기능에는 SQL 서명이 있어야 합니다

supportfn(내부)이 내부를 반환함

다음을 지정하여 대상 함수에 연결됩니다.지원대상 함수를 생성할 때의 절입니다.

Planner 지원 기능을 위한 API의 세부 사항은 파일에서 찾을 수 있습니다src/include/nodes/supportnodes.h에서PostgreSQL소스 코드. 여기에서는 플래너 지원 기능이 수행할 수 있는 작업에 대한 개요를 제공합니다. 지원 기능에 대한 가능한 요청 세트는 확장 가능하므로 향후 버전에서는 더 많은 기능이 가능할 수 있습니다.

일부 함수 호출은 함수별 속성을 기반으로 계획 중에 단순화될 수 있습니다. 예를 들어,int4mul(n, 1)다음과 같이 단순화할 수 있습니다.n. 이러한 유형의 변환은 플래너 지원 기능을 통해 수행될 수 있습니다.지원요청단순화요청 유형. 지원 함수는 쿼리 구문 분석 트리에서 발견된 대상 함수의 각 인스턴스에 대해 호출됩니다. 특정 호출을 다른 형식으로 단순화할 수 있는 것으로 확인되면 해당 표현식을 나타내는 구문 분석 트리를 작성하고 반환할 수 있습니다. 이는 함수를 기반으로 하는 연산자에 대해서도 자동으로 작동합니다. 방금 제공된 예에서는,n * 1또한 다음과 같이 단순화될 것입니다.n. (그러나 이것은 단지 예일 뿐이며 이 특정 최적화는 실제로 표준에 의해 수행되지 않습니다.포스트그레SQL.) 우리는 다음을 보장하지 않습니다.PostgreSQL지원 기능이 단순화될 수 있는 경우에는 대상 기능을 호출하지 않습니다. 단순화된 표현식과 대상 함수의 실제 실행 간에 엄격한 동등성을 보장합니다.

반환하는 대상 함수의 경우부울, a에 의해 선택될 행의 비율을 추정하는 것이 유용한 경우가 많습니다.어디해당 함수를 사용하는 절입니다. 이는 다음을 구현하는 지원 함수를 통해 수행될 수 있습니다.SupportRequestSelectivity요청 유형.

대상 함수의 실행 시간이 입력에 크게 의존하는 경우 일정하지 않은 비용 추정치를 제공하는 것이 유용할 수 있습니다. 이는 다음을 구현하는 지원 함수를 통해 수행될 수 있습니다.지원요청 비용요청 유형.

세트를 반환하는 대상 함수의 경우 반환될 행 수에 대해 일정하지 않은 추정치를 제공하는 것이 유용한 경우가 많습니다. 이는 다음을 구현하는 지원 함수를 통해 수행될 수 있습니다.SupportRequestRows요청 유형.

반환하는 대상 함수의 경우부울,에 나타나는 함수 호출을 변환하는 것이 가능할 수 있습니다.어디에서색인 가능한 연산자 절 또는 절로. 변환된 절은 함수의 조건과 완전히 동일할 수도 있고 다소 약할 수도 있습니다(즉, 함수 조건이 허용하지 않는 일부 값을 허용할 수도 있음). 후자의 경우 인덱스 조건은 다음과 같습니다.손실; 인덱스를 스캔하는 데 계속 사용할 수 있지만 실제로 인덱스를 통과하는지 확인하려면 인덱스에서 반환된 각 행에 대해 함수 호출을 실행해야 합니다.어디에서조건 여부. 이러한 조건을 생성하려면 지원 기능이 다음을 구현해야 합니다.SupportRequestIndexCondition요청 유형.

수정사항 제출

문서에 올바르지 않은 내용이 있으면 일치하지 않습니다. 특정 기능에 대한 경험이 있거나 추가 설명이 필요한 경우 이용해주세요이 양식문서 문제를 보고합니다.