어윈 : 저는 엄격한 주문을 유발하는 사용이 최적의 계획을 배제 할 수있는 많은 경우를 만들 수 있다는 생각에 동의합니다. 나는 최근에 그의 쿼리에서 이와 같은 것을 가진 누군가를 도왔다 :
LEFT JOIN (
a
JOIN b ON a.id = b.a_id
JOIN c ON b.c_id = c.id
) ON a.id = something.a_id
LEFT JOIN (
table1 t1
JOIN table2 t2 ON t1.some_field = t2.other_field
JOIN talbe3 t3 ON t2.yafield = t3.something_else
) ON ....
repeat a few more times
그의 경우 최악의 조인 블록은 약 2 만 번 (약 20 만 번) 행을 통해 중첩 루프 조인을 일으켰으며 (키워드를 수행 할 수 없음) 키를 인덱스로 푸시 할 수 없으므로 순차적 스캔이었습니다. 따라서 계단식 계획 변경으로 인해 전체 쿼리를 실행하는 데 약 3 시간이 걸렸습니다. 왼쪽 조인을 배포하면 키를 눌렀을 수 있으며 쿼리는 몇 초 만에 실행되었습니다. 물론 이것은 정확히 동등한 것은 아니기 때문에 플래너가 그것들을 동등한 것으로 취급 할 수 없기 때문에 그 계획을 해시 조인으로 파악한 다음 중첩 루프를 수행하는 것이 고통 스럽습니다.
특정 순서로 조인을 엄격하게 수행 할 때마다 계획 실행시 키 필터 정보를 아직 사용할 수없는 경우가 발생하므로 빠른 인덱스 스캔 / 해시 조인에서 나중에 수행 할 수있는 작업이 발생합니다. 중첩 된 루프 / 순차 스캔에서 훨씬 느려질 수 있으므로 위의 조각이 즉시 동일하지는 않지만 동일한 문제를 나타냅니다.
USING
약간 빠릅니다 . 귀하의 조사 결과는 2005 년과 2008 년으로 거슬러 올라갑니다. 지금까지 문제가 해결되었다고 가정합니다. 그러나 가능한 제한 사항을 알USING
수 있습니다 . 결과 결합 열이 조인트 제품이므로 JOIN을 순서대로 적용 해야 할 수도 있습니다 . 따라서 JOIN 재정렬 옵션이 잠재적으로 제한됩니다.