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

13.3. 명시 적으로 스포츠 토토 베트맨 제어JoinClauses

쿼리 스포츠 토토 베트맨를 어느 정도 제어 할 수 있습니다. 명시 적 사용Join구문. 보려면 이것이 중요한 이유, 우리는 먼저 약간의 배경이 필요합니다.

간단한 조인 쿼리에서

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

스포츠 토토 베트맨는 주어진 테이블에 어떤 순서로든 무료로 결합 할 수 있습니다. 을 위한 예를 들어, 그만큼여기서조건a.id = b.id, 그런 다음 C를 결합하여 합류했습니다 테이블, 다른 것을 사용여기서조건. 또는 B에 C에 가입 한 다음 A에 가입하여 해당 결과에 참여할 수 있습니다. 아니면 A에 가입 한 다음 B와 합류 할 수는 있지만 A와 C의 전체 직교 제품이 형성되어야합니다.여기서최적화를 허용하는 조항 가입. (모두에 합류합니다.PostgreSQL실행자는 두 입력 사이에 발생합니다 테이블이므로 결과를 하나 또는 이 패션 중 하나는 다른 결합 가능성은 의미 적으로 동등한 결과를 제공합니다 그러나 실행 비용이 크게 다를 수 있습니다. 따라서, 스포츠 토토 베트맨는 가장 많이 찾기 위해 그들 모두를 탐험 할 것입니다. 효율적인 쿼리 계획.

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

쿼리에 외부 결합이 포함되면 스포츠 토토 베트맨는 훨씬 적습니다. 평범한 (내부) 가입에 대한 것보다 자유. 예를 들어, 고려하다

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

이 쿼리의 제한은 피상적으로 유사하지만 이전 예에 따라 의미론은 다르기 때문에 일치하는 행이없는 각 행에 행을 방출해야합니다. B와 C의 결합은 플래너에게 조인을 선택할 수 없습니다. 여기에서 주문하십시오 : B를 C에 가입 한 다음 A에 가입하여 해당 결과에 가입해야합니다. 따라서이 쿼리는 이전보다 계획하는 데 시간이 줄어 듭니다. 질문.

명시 적 내부 조인 구문 (내부 가입하다, 크로스 조인Join)는 의미 적으로 동일합니다 입력 관계 나열From조인 순서를 제한 할 필요는 없습니다. 그러나 가능합니다 지시하려면PostgreSQL쿼리 명시 적 내면을 대하는 스포츠 토토 베트맨Joins as 어쨌든 조인 순서를 제한합니다. 예를 들어,이 세 가지 쿼리는 논리적으로 동일합니다 :

선택 *에서 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 개의 테이블이지만 많은 사람들이있는 생명의 은인이 될 수 있습니다. 테이블.

스포츠 토토 베트맨가를 따르도록 강요하려면Join내부 조인 주문, 설정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 'select규칙이 될 것입니다 보기 참조 대신에 삽입하여 쿼리를 많이 산출합니다. 위와 같습니다. 일반적으로 스포츠 토토 베트맨는 붕괴를 시도합니다 부모로의 하위 쿼리, 양보

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

이것은 일반적으로 계획보다 더 나은 계획을 초래합니다. 하위 쿼리. (예를 들어, 외부여기서조건은 x를 결합하는 것일 수 있습니다 먼저 A의 많은 행을 제거하므로 형성 할 필요가 없습니다. 하위 퀘스트의 전체 논리 출력.) 동시에, 우리는 계획 시간을 늘 렸습니다. 여기에는 5 방향이 있습니다 두 개의 별도 3 방향 조인 문제를 대체하는 문제가 결합됩니다. 가능성 수의 기하 급수적 인 성장으로 인해 이것은 큰 차이를 만듭니다. 플래너는 얻는 것을 피하려고합니다 하위 쿼리를 무너 뜨리지 않음으로써 큰 가입 검색 문제에 갇혀 더 이상from_collapse_limit From항목은 부모가됩니다 질문. 계획 품질에 대해 계획 시간을 거래 할 수 있습니다. 이 런타임 매개 변수를 위 또는 아래로 조정합니다.

from_collapse_limitandjoin_collapse_limit비슷하게 이름이 지정되었습니다 그들은 거의 똑같은 일을합니다. 플래너가 할 때 하나는 제어합니다"flatten out"subSelects 및 명시적인 내부 결합을 평평하게 할 때 다른 컨트롤. 일반적으로 당신은 설정합니다join_collapse_limit동일from_collapse_limit(따라서 명백한 가입 및 subselects 비슷하게 행동) 또는 setjoin_collapse_limit~ 1 (제어하려는 경우 명시 적 조인과 함께 주문). 그러나 당신은 그들을 설정할 수 있습니다 다르게 트레이드 오프를 미세 조정하려는 경우 계획 시간과 달리기 시간.