다음으로 시작포스트그레SQL7.1 쿼리 플래너를 어느 정도 제어할 수 있게 되었습니다. 명시적인 사용하여가입구문. 받는 사람 이것이 왜 중요한지 알아보려면 먼저 배경 지식이 필요합니다.
다음과 같은 간단한 조인 쿼리에서
SELECT * FROM a, b, c WHERE a.id = b.id AND b.ref = c.id;
플래너는 주어진 테이블을 어떤 순서로든 자유롭게 조인할 수 있습니다. 에 대한 예를 들어 다음을 사용하여 A를 B에 조인하는 쿼리 계획을 생성할 수 있습니다.어디조건a.id = b.id, 그런 다음 C를 이 조인에 조인합니다. 테이블, 다른 하나를 사용하여어디에서조건. 또는 B를 C에 결합한 다음 A를 해당 결과에 결합할 수도 있습니다. 아니면 A를 C에 결합한 다음 B와 결합할 수 있습니다. 하지만 이는 A와 C의 전체 데카르트 곱은 비효율적입니다. 을 형성해야 하며, 해당 조건이 없습니다.어디최적화를 허용하는 절 조인. (모든 조인은 다음과 같습니다.포스트그레SQL실행자는 두 입력 사이에서 발생합니다. 테이블이므로 하나 이상의 결과를 구축해야 합니다. 이러한 패션 중 하나입니다.) 중요한 점은 이러한 패션이 서로 다른 조인 가능성은 의미상 동일한 결과를 제공합니다. 그러나 실행 비용은 크게 다를 수 있습니다. 그러므로, 스포츠 토토 베트맨는 모든 것을 탐색하여 가장 좋은 것을 찾으려고 노력할 것입니다. 효율적인 쿼리 계획.
쿼리가 2~3개의 테이블만 포함하는 경우에는
많은 가입 주문이 걱정됩니다. 그러나 가능한 조인 수는
테이블 수가 늘어남에 따라 주문도 기하급수적으로 늘어납니다.
10개 정도의 입력 테이블을 넘어서는 것은 더 이상 실용적이지 않습니다.
모든 가능성에 대한 철저한 검색, 심지어 6개 이상의 가능성까지
7개의 테이블을 계획하는 데는 짜증스러울 정도로 오랜 시간이 걸릴 수 있습니다. 언제
입력 테이블이 너무 많습니다.포스트그레SQL플래너가 다음에서 전환됩니다.
a에 대한 철저한 검색유전적제한된 수의 가능성을 통한 확률적 검색입니다.
(전환 임계값은 다음에 의해 설정됩니다.GEQO_THRESHOLD다음에 설명된 런타임 매개변수사설 토토 사이트 PostgreSQL : 문서 :.) 유전자 검색에는 시간이 덜 걸리며,
하지만 가능한 최선의 계획을 반드시 찾을 수는 없습니다.
쿼리가 외부 조인과 관련된 경우 스포츠 토토 베트맨는 훨씬 적은 양의 일반(내부) 조인보다 자유로워집니다. 예를 들어, 고려하다
SELECT * FROM a LEFT JOIN (b JOIN c ON (b.ref = c.id)) ON (a.id = b.id);
이 쿼리의 제한 사항은 표면적으로 유사하지만 이전 예와는 의미가 다릅니다. 일치하는 행이 없는 A의 각 행에 대해 행을 내보내야 합니다. B와 C의 조인. 따라서 플래너는 조인을 선택할 수 없습니다. 여기에서 주문하세요. B를 C에 결합한 다음 A를 해당 결과에 결합해야 합니다. 따라서 이 쿼리는 이전 쿼리보다 계획하는 데 시간이 덜 걸립니다. 쿼리.
그PostgreSQL쿼리 스포츠 토토 베트맨 모든 명시적인 내용을 처리합니다.가입구문: 논리적이지 않더라도 조인 순서를 제한합니다. 내부 조인에 대해 이러한 제약 조건을 만드는 데 필요합니다. 그러므로, 하지만 이러한 쿼리는 모두 동일한 결과를 제공합니다.
SELECT * FROM a, b, c WHERE a.id = b.id AND b.ref = c.id; SELECT * FROM a CROSS JOIN b CROSS JOIN c WHERE a.id = b.id AND b.ref = c.id; SELECT * FROM a JOIN (b JOIN c ON (b.ref = c.id)) ON (a.id = b.id);
그러나 두 번째와 세 번째는 계획하는 데 시간이 덜 걸립니다. 먼저. 이 효과는 단지 3개에 대해서만 걱정할 가치가 없습니다. 하지만 테이블이 많으면 생명의 은인이 될 수 있습니다.
조인 순서를 완전히 제한할 필요는 없습니다. 사용해도 괜찮으니 검색 시간을 단축하기 위해가입평야의 연산자발신목록. 예를 들어,
SELECT * CROSS JOIN b, c, d, e WHERE ...;
계획자가 A를 B에 합류시키기 전에 다른 A에 합류하도록 강제합니다. 테이블이지만 선택 사항을 제한하지는 않습니다. 이에 예를 들어, 가능한 조인 주문 수는 다음과 같이 줄어듭니다. 5의 인수.
복잡한 쿼리에 외부 조인과 내부 조인이 혼합되어 있는 경우, 기획자의 상품 검색을 제한하고 싶지 않을 수도 있습니다. 외부 조인 내부의 내부 조인 순서. 당신은 그렇게 할 수 없습니다 직접가입구문이지만 다음과 같이 할 수 있습니다. 하위 선택을 사용하여 구문 제한을 해결합니다. 에 대한 예
SELECT * FROM d LEFT JOIN
(SELECT * FROM a, b, c WHERE ...) AS ss
켜기(...);
여기서 D에 합류하는 것은 쿼리 계획의 마지막 단계여야 하지만 스포츠 토토 베트맨는 A, B에 대한 다양한 조인 순서를 자유롭게 고려할 수 있습니다. 다.
이러한 방식으로 계획자의 검색을 제한하는 것은 유용합니다. 계획 시간을 단축하고 방향을 잡는 기술 좋은 쿼리 계획을 세우는 플래너입니다. 플래너가 잘못된 조인을 선택한 경우 기본적으로 주문하려면 다음을 통해 더 나은 주문을 선택하도록 강제할 수 있습니다.가입구문 --- 알고 있다고 가정 즉, 더 나은 순서입니다. 실험을 권장합니다.