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

준비

PREPARE — 실행을 위한 명령문 준비

시놉시스

준비이름 [ ( 데이터_유형[, ...] ) ] AS성명

설명

준비준비된 명령문을 생성합니다. 준비된 문은 성능을 최적화하는 데 사용할 수 있는 서버측 개체입니다. 때준비문이 실행되면 지정된 문이 구문 분석, 분석 및 다시 작성됩니다. 때실행명령이 이후에 실행되면 준비된 명령문이 계획되고 실행됩니다. 이러한 작업 분할을 통해 반복적인 구문 분석 작업을 방지하는 동시에 실행 계획이 제공된 특정 매개변수 값에 따라 달라질 수 있습니다.

준비된 명령문은 매개변수를 가질 수 있습니다: 실행될 때 명령문에 대체되는 값. 준비된 문을 생성할 때, 다음을 사용하여 위치별 매개변수를 참조하십시오.$1, $2등. 매개변수 데이터 유형의 해당 목록을 선택적으로 지정할 수 있습니다. 매개변수의 데이터 유형이 지정되지 않거나 다음과 같이 선언된 경우알 수 없음, 유형은 매개변수가 처음 참조되는 컨텍스트에서 추론됩니다(가능한 경우). 명령문을 실행할 때 다음 매개변수에 대한 실제 값을 지정하십시오.실행성명. 참조실행자세한 내용은 여기를 참조하세요.

준비된 명령문은 현재 데이터베이스 세션 동안에만 지속됩니다. 세션이 종료되면 준비된 문장은 잊혀지기 때문에 다시 사용하기 전에 다시 생성해야 합니다. 이는 또한 단일 준비된 명령문을 여러 동시 데이터베이스 클라이언트에서 사용할 수 없음을 의미합니다. 그러나 각 클라이언트는 사용할 자신만의 준비된 문을 만들 수 있습니다. 준비된 문은 다음을 사용하여 수동으로 정리할 수 있습니다.해제명령.

준비된 명령문은 단일 세션이 다수의 유사한 명령문을 실행하는 데 사용될 때 잠재적으로 가장 큰 성능 이점을 갖습니다. 쿼리에 여러 테이블의 조인이 포함되거나 여러 규칙을 적용해야 하는 경우와 같이 명령문을 계획하거나 다시 작성하기가 복잡한 경우 성능 차이가 특히 커집니다. 명령문을 계획하고 다시 작성하는 것은 상대적으로 간단하지만 실행하는 데 상대적으로 비용이 많이 드는 경우 준비된 명령문의 성능 이점은 눈에 띄지 않습니다.

매개변수

이름

이 특정 준비된 명령문에 부여된 임의의 이름입니다. 단일 세션 내에서 고유해야 하며 이후에 이전에 준비된 문을 실행하거나 할당을 취소하는 데 사용됩니다.

데이터_유형

준비된 명령문에 대한 매개변수의 데이터 유형입니다. 특정 매개변수의 데이터 유형이 지정되지 않거나 다음과 같이 지정된 경우알 수 없음, 매개변수가 처음 참조되는 컨텍스트에서 추론됩니다. 준비된 문 자체의 매개변수를 참조하려면 다음을 사용하세요.$1, $2

성명

모두선택, 삽입, 업데이트, 삭제또는성명.

참고

준비된 진술은 제공된 각 세트로 다시 계획하는 대신 일반 계획을 사용할 수 있습니다.실행값. 이는 매개변수가 없는 준비된 명령문의 경우 즉시 발생합니다. 그렇지 않으면 예상 비용 평균(계획 오버헤드 포함)이 일반 계획 비용 추정보다 더 비싼 계획을 5회 이상 실행한 후에만 발생합니다. 일반 계획을 선택하면 준비된 문의 남은 수명 동안 사용됩니다. 사용실행중복 항목이 많은 열에서 드물게 발생하는 값은 계획 오버헤드를 추가한 후에도 일반 계획보다 훨씬 저렴한 사용자 정의 계획을 생성할 수 있으므로 일반 계획은 절대 사용되지 않을 수 있습니다.

일반적인 계획에서는 각 값이 다음에 제공된다고 가정합니다.실행은 열의 고유 값 중 하나이며 해당 열 값은 균일하게 분포됩니다. 예를 들어 통계가 세 개의 고유한 열 값을 기록하는 경우 일반 계획에서는 열 동일성 비교가 처리된 행의 33%와 일치한다고 가정합니다. 또한 열 통계를 사용하면 일반 계획을 통해 고유한 열의 선택성을 정확하게 계산할 수 있습니다. 불균일하게 분산된 열의 비교와 존재하지 않는 값의 지정은 평균 계획 비용에 영향을 미치므로 일반 계획을 선택하는지 여부와 시기에 영향을 미칩니다.

쿼리 계획을 조사하려면토토준비된 문을 사용하고 있습니다. 사용설명, 예:설명 실행. 일반 계획을 사용 중인 경우 매개변수 기호가 포함됩니다.$n, 맞춤형 계획에는 제공된 매개변수 값이 대체됩니다. 일반 계획의 행 추정치는 매개변수에 대해 계산된 선택성을 반영합니다.

쿼리 계획 및 수집된 통계에 대한 자세한 내용은토토그 목적에 대해서는 다음을 참조하세요.분석문서.

준비된 진술의 주요 요점은 반복적인 구문 분석 및 진술 계획을 피하는 것이지만,토토이전 준비된 문의 사용 이후 문에 사용된 데이터베이스 객체가 정의(DDL) 변경을 거칠 때마다 문을 사용하기 전에 문을 강제로 재분석하고 다시 계획합니다. 또한, 값이검색_경로한 용도에서 다음 용도로 변경되면 명령문은 새로운 것을 사용하여 다시 구문 분석됩니다.검색_경로. (이 후자의 동작은 현재 새로운 것입니다.포스트그레SQL9.3.) 이러한 규칙은 준비된 문을 사용하여 동일한 쿼리 텍스트를 반복해서 다시 제출하는 것과 의미상 거의 동일하지만 개체 정의가 변경되지 않은 경우, 특히 최상의 계획이 사용 전반에 걸쳐 동일하게 유지되는 경우 성능 이점이 있습니다. 의미론적 동등성이 완벽하지 않은 경우의 예는 명령문이 정규화되지 않은 이름으로 테이블을 참조하고 동일한 이름의 새 테이블이 이전에 나타나는 스키마에 생성되는 경우입니다.검색_경로, 명령문에 사용된 개체가 변경되지 않았으므로 자동 재분석이 발생하지 않습니다. 그러나 다른 변경 사항으로 인해 강제로 다시 구문 분석이 이루어지면 이후 사용 시 새 테이블이 참조됩니다.

다음을 쿼리하여 세션에서 사용 가능한 모든 준비된 명령문을 볼 수 있습니다.pg_prepared_statements시스템 보기.

다음에 대해 준비된 명령문을 작성하십시오.삽입문을 작성한 다음 실행하세요.

Fooplan 준비(정수, 텍스트, 부울, 숫자) AS
    foo 값에 삽입($1, $2, $3, $4);
EXECUTE fooplan(1, 'Hunter Valley', 't', 200.00);

다음에 대해 준비된 명령문 생성선택문을 작성한 다음 실행하세요.

usrrptplan (int) AS 준비
    SELECT * FROM 사용자 u, 로그 l WHERE u.usrid=$1 AND u.usrid=l.usrid
    그리고 l.날짜 = $2;
실행 usrrptplan(1, 현재_날짜);

두 번째 매개변수의 데이터 유형은 지정되지 않았으므로 해당 컨텍스트에서 추론됩니다.$2사용됩니다.

호환성

SQL 표준에는 다음이 포함됩니다.준비문이지만 Embedded SQL에서만 사용할 수 있습니다. 이 버전의준비문도 다소 다른 구문을 사용합니다.

또한 참조

해제, 실행