| PostgreSQL 9.3.25 문서 | ||||
|---|---|---|---|---|
| PostgreSQL : 문서 : 9.3 : 토토 사이트 순위 과부하 | Postgre토토 사이트 추천 : 문서 : 9.3 : 토토 사이트 추천 확장 | 35장. 연장SQL | 다음 | |
모든 함수에는변동성분류, 가능성은 다음과 같습니다휘발성, 안정적, 또는불변. 휘발성다음의 경우 기본값입니다.함수 생성명령은 그렇지 않습니다 카테고리를 지정하세요. 변동성 범주는 다음과 같은 약속입니다. 함수의 동작에 대한 최적화:
A 휘발성함수는 무엇이든 할 수 있습니다. 데이터베이스 수정을 포함합니다. 다른 결과를 반환할 수 있습니다. 동일한 인수를 사용한 연속 호출에서. 옵티마이저는 아무것도 하지 않습니다. 그러한 기능의 동작에 대한 가정. 를 사용한 쿼리 휘발성 함수는 모든 행에서 함수를 재평가합니다. 그 값이 필요합니다.
A 안정적함수는 다음을 수정할 수 없습니다. 데이터베이스이며 주어진 경우 동일한 결과를 반환하도록 보장됩니다. 단일 문 내의 모든 행에 대해 동일한 인수입니다. 이 카테고리를 사용하면 옵티마이저가 여러 호출을 최적화할 수 있습니다. 단일 호출로 기능합니다. 특히, 다음을 사용하는 것이 안전합니다. 인덱스 스캔 조건에 이러한 함수가 포함된 표현식입니다. (인덱스 스캔은 비교값을 한번만 평가하기 때문에, 각 행에 한 번이 아닌 경우 a를 사용하는 것은 유효하지 않습니다.휘발성인덱스 스캔 조건에서 토토 사이트합니다.)
안불변함수는 다음을 수정할 수 없습니다. 데이터베이스이며 주어진 경우 동일한 결과를 반환하도록 보장됩니다. 영원히 같은 주장. 이 범주를 사용하면 최적화 프로그램이 다음을 수행할 수 있습니다. 쿼리가 상수를 사용하여 호출할 때 함수를 사전 평가합니다. 인수. 예를 들어, 다음과 같은 쿼리는선택 ... 여기서 x = 2 + 2눈에 보이는 대로 단순화될 수 있음선택 ... WHERE x = 4, 왜냐하면 함수는 기본 정수 추가 연산자가 표시됩니다.불변.
최상의 최적화 결과를 얻으려면 함수에 라벨을 지정해야 합니다 유효한 가장 엄격한 변동성 카테고리를 사용합니다.
부작용이 있는 모든 토토 사이트반드시라벨이 지정됨휘발성, 이에 대한 호출이 최적화될 수 없습니다. 멀리. 부작용이 없는 토토 사이트이라도 라벨을 붙여야 합니다.휘발성그 값이 일정 기간 내에 변경될 수 있는 경우 단일 쿼리; 몇 가지 예는 다음과 같습니다무작위(), currval(), timeofday().
또 다른 중요한 예는 다음과 같습니다.현재_타임스탬프함수 계열은 다음과 같습니다.안정적, 해당 값은 변경되지 않으므로
거래 내에서.
상대적으로 차이가 거의 없습니다.안정적그리고불변간단한 대화형 쿼리를 고려할 때 카테고리 계획하고 즉시 실행합니다. 성공 여부는 그다지 중요하지 않습니다. 함수는 계획 중에 한 번 또는 쿼리 중에 한 번 실행됩니다. 실행 시작. 하지만 계획대로라면 큰 차이가 있습니다 저장하고 나중에 다시 사용하세요. 함수에 라벨 지정불변실제로 그렇지 않은 경우에는 허용될 수도 있습니다. 계획 중에 조기에 상수로 접혀 결과적으로 계획의 후속 사용 중에 오래된 값이 재사용됩니다. 이 준비된 문을 사용하거나 함수를 사용할 때 위험합니다. 계획을 캐시하는 언어(예:PL/pgSQL).
SQL 또는 표준으로 작성된 함수의 경우 절차적 언어에는 두 번째로 중요한 속성이 있습니다. 변동성 범주, 즉 모든 항목의 가시성에 따라 결정됩니다. 호출하는 SQL 명령에 의해 변경된 데이터 기능. 갑휘발성함수는 다음을 볼 것입니다 그러한 변화는, a안정적또는불변토토 사이트은 그렇지 않습니다. 이 행동은 MVCC의 스냅샷 동작을 사용하여 구현되었습니다(참조13장): 안정적그리고불변함수는 스냅샷을 사용합니다 호출 쿼리가 시작될 때 설정되는 반면휘발성함수는 새로운 스냅샷을 얻습니다 실행되는 각 쿼리가 시작될 때.
참고:C로 작성된 함수는 스냅샷을 관리할 수 있지만 하지만 일반적으로 C 함수가 작동하도록 만드는 것이 좋습니다. 이쪽도 마찬가지야.
이 스냅샷 동작으로 인해 다음을 포함하는 함수가 만선택명령은 안전하게 표시될 수 있습니다.안정적, 테이블에서 선택하더라도 동시 쿼리에 의해 수정이 진행 중일 수 있습니다.PostgreSQL모두 실행됩니다 a의 명령안정적함수를 사용하여 호출 쿼리에 대해 설정된 스냅샷을 통해 해당 쿼리 전반에 걸쳐 데이터베이스의 고정 뷰입니다.
동일한 스냅샷 동작이 다음에 사용됩니다.선택내 명령불변함수. 일반적으로 현명하지 못한 행동입니다 내의 데이터베이스 테이블에서 선택불변불변성 이후로 함수가 전혀 작동하지 않습니다. 테이블 내용이 변경되면 깨집니다. 하지만,PostgreSQL그것을 시행하지 않습니다 넌 그러지 마.
일반적인 오류는 함수에 라벨을 붙이는 것입니다.불변결과가 구성에 따라 달라지는 경우 매개변수. 예를 들어 타임스탬프를 조작하는 함수 에 따라 결과가 나올 수도 있습니다.시간대설정. 에 대한 안전을 위해 이러한 토토 사이트은 라벨로 표시되어야 합니다.안정적대신.
참고:이전포스트그레SQL릴리스 8.0, 요구사항안정적그리고불변함수는 다음을 수정할 수 없습니다. 데이터베이스가 시스템에 의해 시행되지 않았습니다. 릴리스 8.0 이상 SQL 함수와 절차적 언어를 요구하여 이를 시행합니다. 이러한 범주의 함수에는 이외의 SQL 명령이 포함되지 않습니다.선택. (완전히 그런건 아니지만 이러한 함수는 여전히 호출할 수 있으므로 방탄 테스트입니다.휘발성데이터베이스를 수정하는 함수. 당신이 그렇게 하면, 당신은 그 결과를 알게 될 것입니다.안정적또는불변함수는 다음을 인지하지 못합니다. 호출된 함수에 의해 적용되는 데이터베이스 변경 사항은 다음과 같습니다. 스냅샷에서 숨겨져 있습니다.)