2014-08-28 3 views
1
내가 큰 SQL 요청의 많은 프로젝트를 진행하고

, 내가 알고 싶은 :SQL 하위 쿼리 및 가입 쿼리

사이의 속도의 관점에서 더 나은 성능을 제공하는 것

:

  • 가입 검색어
  • 서브 쿼리 예


SELECT artistName FROM artist, 
(SELECT group.available = true) AS groupAvailable 
WHERE groupAvailable.location = artist.location 

큰 쿼리에 대한 더 나은 성능과 저를 제공 할 수있는 것.

+2

두 번째 쿼리도 실행됩니까? 어떤 DBMS에서? –

+1

내 본능은 나중에 더 빠를 것이다. 서브 쿼리를 사용하면'group.aavailable! = true'가되는 행이 제거되고 조인이 많은 레코드에 저장되지 않기 때문이다. 즉, 시간을내어 볼 수 있습니다. 하지만 하위 쿼리에 구문 오류가 있습니다. –

+0

일반적으로 조인이 더 좋습니다. 이미 물어보고 대답했다. https://stackoverflow.com/questions/2577174/join-vs-sub-query –

답변

1

특정 검색어에 대한 답변을 알 필요가 있다고 언급하지 않았으므로 join 검색어가 subqueries보다 빠르지 않은지 일반 질문에 답하는 것으로 간주됩니다. 대부분의 경우 join 쿼리는 subqueries보다 빠릅니다. 나도 답을 알고하지 않았다, 그래서 질문을 본 후에 내가 연구하고 내가 뭘 찾았는지 난에서 인용하고 -

에서는 RDBMS가 쿼리에 대한 더 예측할 수있는 실행 계획을 만들 수 있습니다 조인 처리 할 데이터를로드해야하고 서브 쿼리와 달리 모든 쿼리를 실행하고 처리를 위해 데이터를 모두로드하는 것과 달리 은 시간을 절약합니다.

사실이 질문을 한 사람은 처음이 아닙니다. 당신이 맞다면 또 다른 비슷한 질문은 here입니다.

+0

@ taufique 감사합니다 –

+0

당신은 환영합니다 :) 그리고 나에게 뭔가 가르쳐 준 질문에 +1. :) – taufique

1

두 번째 쿼리가 유효한 SQL인지는 확실하지 않지만 질문에 대한 답변은 다행히도 관련이 없습니다.

성능은 여러 가지 요인에 따라 달라 지므로 이러한 종류의 질문에 대한 최상의 대답은 "의존적"입니다.

먼저 쿼리를 최적화해야합니다. 현재 런타임이 허용되는 경우 아무 것도 건드리지 마십시오 (손상되지 않은 것을 수정하지 마십시오).

검색어를 최적화해야하는 경우 혼자 사용해보십시오. DBMS, 서버로드, 데이터 배포 및 잠재적으로 다른 변수에 따라 성능이 많이 바뀔 수 있으므로 실제 상황을 테스트하고 결과가 원하는 것인지 판단하는 것이 유일한 방법입니다.

+0

그리고 어떻게 둘 다 성능을 시험해 볼 수 있습니까? 최악의 경우? –

+0

테스트 사례의 경우 통계를 켜야합니다. –

1

다른 여러 사람들이 언급했듯이 실제로는 의존적입니다. 쿼리를 실행하는 데이터베이스가 작성된 그대로 코드를 따르는 것은 아닙니다. 종종 기대했던 것과는 아주 다르게 실행됩니다. 사실, 작성한 두 쿼리 모두 정확히 같은 방식으로 실행될 수 있습니다. 통계를 켜기 시도하고 확인하는 두 쿼리를 실행

SET STATISTICS IO ON 
SET STATISTICS TIME ON 

당신에이 두 가지 설정으로 쿼리를 실행

논리적 읽기 얼마나 많은 볼 수있다 (당신은 MS SQL 서버에있는 가정) 얼마나 많은 CPU 시간은 촬영 . 성능 병목 현상을 파악하는 데 실제로 도움이 될 수 있습니다.