2012-03-04 4 views
1

조인 또는 하위 쿼리를 모두 사용하여 쿼리를 작성할 수있는 여러 인스턴스가 있습니다. 나는 보통 조인을 사용하지만 때로 하위 쿼리를 사용합니다 (아무런 이유없이). 조인은 여러 인스턴스에서 하위 쿼리보다 빠르지 만 하위 쿼리는 더 빠르다고 여러 곳에서 읽었습니다 (stackoverflow 포함). 지금 제가 작성한 쿼리는 많은 양의 데이터를 처리하지 않으므로 속도는별로 중요하지 않습니다. 그러나 미래에는 다음에 대해 궁금합니다.조인/서브 쿼리 딜레마

) 조인이 서브 쿼리보다 빠릅니다 (일반적으로).

b.) 하위 쿼리가 더 빠른 인스턴스는 무엇입니까? 내가 어떻게 알아?

c.) 쿼리를 작성하는 경우 하위 쿼리 또는 조인을 사용해야하는지 여부를 어떻게 판단해야합니까? 누군가 제가 예를 들어 설명해 주시면 감사하겠습니다.

답변

2

질문에 대한 답변입니다.

a) 조인은 일반적으로 하위 쿼리보다 빠릅니다. 하지만 DBMS는 조인을 사용하면 훨씬 더 똑똑한 실행 계획을 생성합니다. 이는 쿼리가 실행 계획으로 변환되는 방법과 관련된 두 가지 절차입니다.

b) c) 일반적으로 빠른 쿼리 작성 규칙이 없습니다. 또한 작업에 올바른 쿼리를 선택하는 방법은 한 가지뿐입니다. 다른 버전을 벤치 마크해야합니다. 따라서 특정 쿼리 벤치 마크를 공식화하는 방법을 먼저 결정해야만하고 성능이 좋으면 중지하십시오. 그렇지 않으면 뭔가를 변경하고 벤치마킹을 다시하고 괜찮 으면 중지하십시오. 실제 환경에 가까운 환경을 사용하십시오. 현실적인 데이터 세트를 사용하십시오. 질의는 수천 개의 레코드에서 잘 수행되지만 수백만 개에서는 제대로 수행되지 않을 수 있습니다. 프로덕션 환경과 동일한 하드웨어를 사용하십시오. 다른 쿼리가 쿼리의 성능에 영향을 줄 수 있으므로 응용 프로그램의 컨텍스트에서 쿼리를 벤치마킹하는 것이 좋습니다.

1

내가 한 연구의 주된 이유는 컴파일러가 명시 적으로 조인을 수행하는 방법을 명시 할 때 (즉, 왼쪽 조인, 내부 조인 등) 적절한 인덱스를보다 효율적으로 사용한다는 것입니다. 쿼리에서는 최적화 알고리즘에 약간의 차이가 있지만 항상 가장 빠른 방법은 아닙니다 (이는 '옵티 마이저'라고 불리는 것에 지장이 있습니다).

어쨌든 하위 쿼리를 작성하는 것이 더 쉬울 수도 있지만 속도와 장기간 사용을 위해 쿼리를 작성하는 경우 명시 적 조인을 작성해야한다는 것이 분명합니다. 여기

몇 가지 전망과 예제와 함께 몇 가지 링크입니다 :

Join vs. Subquery

Another link이 사람은 하위 쿼리 이상 (대부분의 경우)입니다 빠른 조인 이유를 몇 가지 세부 사항을 제공합니다. 조인

more examples

+0

귀하의 링크는 SQL Server, MySQL 및 DB2에만 적용됩니다. 일반적으로 SQL 및 Join-vs-subqueries 성능에 관한 것은 아닙니다. –

3

말은 '대부분 빠른'하위 쿼리 이상 사실이 아니다. 이것은 전적으로 사용 된 DBMS에 달려 있습니다.

Microsoft SQL Server의 경우 이것이 사실이 아닙니다. 일반적으로 성능은 동일합니다. 뿐만 아니라 이론적으로, 또한 실제로.

MySQL의 경우 서브 쿼리에 문제가 있다고 들었습니다. 나는 개인적인 증거가 없다.

오라클은 SQL Server와 거의 같은 것으로 보입니다.

+0

답변 해 주셔서 감사합니다. 쿼리를 작성하기 전에 조인을 사용해야하는지 또는 하위 쿼리를 사용해야하는지 판단하는 가장 좋은 방법을 사용해야합니다. 모든 dbms에 대해. 어떻게 판사 니? – Ank

+0

dbms에 대해 판단 할 수 없습니다. 구체적인 것을 말해주십시오. – usr

+0

MySQL을 말하십시오. 내가 의미했던 것은 당신이 그것을 할 때 어떻게 결정할 것인가였습니다. 아니면이 DBMS 사용 조인이 DBMS 사용 하위 쿼리 등에 대한 것입니까 – Ank