이 문서는 지원되지 않는 버전의 PostgreSQL 용입니다.
당신은에 대해 같은 페이지를 볼 수 있습니다PostgreSQL : 문서 : 17 : 14.3. 명백한 토토 사이트 조항으로 사설 토토 사이트 제어버전 또는 위에 나열된 다른 지원 버전 중 하나입니다.

14.3. 명시 적으로 사설 토토 사이트 제어JoinClauses

명시 적 사용을 통해 쿼리 사설 토토 사이트를 어느 정도 제어 할 수 있습니다Join구문. 이것이 중요한 이유를 확인하려면 먼저 배경이 필요합니다.

:과 같은 간단한 조인 쿼리에서

선택 *에서 a, b, c a.id = b.id 및 b.ref = c.id;에서 선택하십시오.

사설 토토 사이트는 주어진 테이블에 어떤 순서로든 자유롭게 참여할 수 있습니다. 예를 들어,를 사용하여 a to b에 가입하는 쿼리 계획을 생성 할 수 있습니다.여기서조건a.id = b.id, 그런 다음 다른 테이블을 사용 하여이 결합 된 테이블에 C를 결합합니다여기서조건. 또는 B에 C에 가입 한 다음 A에 가입하여 해당 결과에 참여할 수 있습니다. 또는 A에 가입 한 다음 B와 결합 할 수 있습니다. 그러나 A와 C의 전체 직교 제품이 형성되어야하므로에 적용 가능한 조건이 없기 때문에 비효율적입니다.여기서조인의 최적화를 허용하기위한 조항. (모두에 합류합니다.PostgreSQLexecutor는 두 입력 테이블 사이에 발생하므로 이러한 패션 중 하나 또는 다른 패션에서 결과를 구축해야합니다.) 이러한 중요한 점은 이러한 다른 결합 가능성이 의미 적으로 동등한 결과를 제공하지만 실행 비용이 크게 다를 수 있다는 것입니다. 따라서 사설 토토 사이트는 가장 효율적인 쿼리 계획을 찾기 위해 그들 모두를 탐색 할 것입니다.

쿼리에 2 ~ 3 개의 테이블 만 포함되면 걱정할 명령이 많지 않습니다. 그러나 테이블 수가 확장됨에 따라 가능한 조인 주문 수는 기하 급수적으로 증가합니다. 10 개 정도의 입력 테이블을 넘어서 더 이상 모든 가능성을 철저하게 검색하는 것이 실용적이지 않으며 6 ~ 7 개의 테이블 계획조차도 성가신 시간이 오래 걸릴 수 있습니다. 입력 테이블이 너무 많으면PostgreSQLPlanner는 철저한 검색에서 A로 전환됩니다.genetic제한된 수의 가능성을 통한 확률 검색. (스위치 오버 임계 값은에 의해 설정됩니다.geqo_threshold런타임 매개 변수.) 유전자 검색은 시간이 줄어들지 만 반드시 가능한 최상의 계획을 찾을 수는 없습니다.

쿼리에 외부 결합이 포함되면 사설 토토 사이트는 평범한 (내부) 조인보다 자유가 적습니다. 예를 들어, 고려 :

선택 * 왼쪽 조인 (b 조인 c On (b.ref = c.id)) on (a.id = b.id);

이 쿼리의 제한은 이전 예제와 피상적으로 유사하지만 Semantics는 B와 C의 조인에 일치하는 행이없는 각 행에 행이 방출되어야하기 때문에 Semantics가 다릅니다. 따라서 Planner는 BIN 순서를 선택하지 않아야합니다. B에 가입 한 다음 해당 결과에 가입해야합니다. 따라서이 쿼리는 이전 쿼리보다 계획하는 데 시간이 줄어 듭니다. 다른 경우, 사설 토토 사이트는 둘 이상의 결합 주문이 안전하다고 판단 할 수 있습니다. 예를 들어 주어진 :

select *에서 * 왼쪽에 가입 b on (a.bid = b.id) left c on (a.cid = c.id);

a에 b 또는 c에 합류하는 것이 유효합니다. 현재 만전체 조인조인 순서를 완전히 제한합니다. 관련된 대부분의 실용 사례왼쪽 조인또는오른쪽 조인어느 정도 재 배열 될 수 있습니다.

명시 적 내부 조인 구문 (내부 조인, 크로스 조인또는 undornedJoin)는 입력 관계를 나열하는 것과 의미 적으로 동일합니다.From, 그래서 조인 순서를 제한하지 않습니다.

비록 대부분의 종류의Join조인 순서를 완전히 제한하지 마십시오.PostgreSQL모든 것을 치료하는 쿼리 사설 토토 사이트Join어쨌든 조인 순서를 제한하는 조항. 예를 들어이 세 가지 쿼리는 논리적으로 동일합니다.

선택 *에서 a, b, c에서 a.id = b.id 및 b.ref = c.id;
크로스 조인 B 크로스 조인 C에서 *를 선택하십시오. 여기서 a.id = b.id 및 b.ref = c.id;
(A.ID = B.ID); ON (A.ID = B.Id);

그러나 우리가 사설 토토 사이트에게 명예를 명예라고 말하면Join순서, 두 번째와 세 번째는 첫 번째보다 계획하는 데 시간이 줄어 듭니다. 이 효과는 3 개의 테이블에 대해서만 걱정할 가치가 없지만 테이블이 많은 생명의 은인이 될 수 있습니다.

Planner가 명시 적으로 명시된 조인 명령을 따르도록 강요하려면Joins, 설정join_collapse_limit런타임 매개 변수에서 1. (다른 가능한 값은 아래에 설명되어 있습니다.)

검색 시간을 줄이기 위해 조인 순서를 완전히 제한 할 필요가 없습니다.Join평원 항목 내의 운영자From목록. 예를 들어, 고려 :

선택 *에서 크로스 조인 B, C, D, E WHERE ...;에서 선택하십시오.

withjoin_collapse_limit= 1, 이로 인해 사설 토토 사이트는 다른 테이블에 합류하기 전에 사설 토토 사이트가 A에 가입하도록 강요하지만 그렇지 않으면 선택을 제한하지는 않습니다. 이 예에서는 가능한 조인 주문 수가 5의 계수로 줄어 듭니다.

이러한 방식으로 사설 토토 사이트의 검색을 제한하는 것은 계획 시간을 줄이고 사설 토토 사이트를 좋은 쿼리 계획으로 안내하는 데 유용한 기술입니다. 사설 토토 사이트가 기본적으로 불량 조인 주문을 선택하면를 통해 더 나은 주문을 선택하도록 강요 할 수 있습니다.Join구문 - 더 나은 순서를 알고 있다고 가정합니다. 실험이 권장됩니다.

계획 시간에 영향을 미치는 밀접하게 관련된 문제는 하위 쿼리를 부모 쿼리로 붕괴시키는 것입니다. 예를 들어, 고려 :

선택 *
x, y,
    (a, b, c에서 * 선택) ss로서
something else;

이 상황은 가입이 포함 된 견해를 사용하여 발생할 수 있습니다. The View 'selectview 참조 대신 규칙이 삽입되어 위와 같은 쿼리를 산출합니다. 일반적으로 사설 토토 사이트는 하위 쿼리를 부모로 붕괴 시키려고합니다.

선택 *에서 x, y, a, b, c 어디서 무언가와 무언가 else;

이것은 일반적으로 하위 쿼리를 개별적으로 계획하는 것보다 더 나은 계획을 초래합니다. (예를 들어, 외부여기서조건은 X를 먼저 A와 처음으로 제거하여 A의 많은 행을 제거하여 하위 퀘스트의 전체 논리적 출력을 형성 할 필요가 없지만 동시에 계획 시간을 증가 시켰습니다. 여기에는 두 개의 별도의 3 방향 조인 문제를 대체하는 5 방향 조인 문제가 있습니다. 가능성의 수의 기하 급수적 성장으로 인해 큰 차이가 발생합니다. 플래너는 하위 쿼리를 붕괴시키지 않음으로써 큰 ​​가입 검색 문제에 갇히지 않기 위해from_collapse_limit From항목은 상위 쿼리를 초래합니다. 이 런타임 매개 변수를 위 또는 아래로 조정하여 계획 품질에 대해 계획 시간을 트레이드 할 수 있습니다.

from_collapse_limitandjoin_collapse_limit거의 같은 일을하기 때문에 비슷하게 이름이 지정됩니다. 사설 토토 사이트가있을 때 제어합니다"평평한"하위 쿼리 및 다른 컨트롤이 명백한 결합을 평평하게 할 때 다른 컨트롤이 있습니다. 일반적으로 당신은 설정합니다join_collapse_limit동일from_collapse_limit(따라서 명백한 조인 및 하위 쿼리가 비슷하게 행동하도록) 또는 설정join_collapse_limitto 1 (명시 적 조인과의 순서를 제어하려는 경우). 그러나 계획 시간과 실행 시간 간의 트레이드 오프를 미세 조정하려고한다면 다르게 설정할 수 있습니다.