2009-09-10 4 views
0

I 두 개 테이블을 조인했습니다. 각 테이블에는 5000 개가 넘는 레코드가 들어 있습니다. 나는 두 가지 방법으로 참여했습니다. 첫 번째 쿼리에서는 JOIN 키워드를 사용하고 ON 조건에서 조건을 부여했습니다. 두 번째 쿼리에서 방금 테이블 사이에 쉼표 연산자를 사용하고 WHERE 절에 조인 조건을 부여했습니다.SQL Server 성능?

시간과 비용면에서 어느 것이 효과적일까요 ....?

난 (INNER JOIN을) 제 2 질의가 테이블 SCAN 31 %를 69 % 선정했다

먼저 쿼리 테이블 SCAN 61 %의 비용 해시 MATCH 38 %로했다 실행 계획으로 보면 해시 일치 (내부 결합).

이 차이점을 설명해 주시겠습니까?

첫 번째 테이블이 효과적이라고 가정하면 테이블 스캔 비용이 적기 때문입니다. 맞아...?

+0

이 질문은 관련 필드가 색인 표 중 하나 또는 모두에서 색인화되었는지 여부와 색인의 성격을 나타내는 데는 의미가 없습니다 – AnthonyWJones

+0

첫 번째 조회가 표 스캔을 수행합니다 - 가능하면 표의 외래 키를 비표준으로 설정해야합니다 -clustered 인덱스. 그러면 쿼리는 인덱스 스캔을 수행해야합니다. – Paul

답변

1

그것은 나에게 소리 쿼리 계획이 동일한 것처럼 두 경우 모두 ... 두 번 테이블 스캔과 해시 일치가 발생 했으므로 ...

그 백분율을 비교하기 전에 ...내가이 질문에 위험을 설명하자

61% of 465 

또는

69% of 234 

더 큰되는 ??

이 경우 234의 69 %가 465의 61 %보다 훨씬 더 빠르다는 것을 알 수 있습니다. 쿼리의 총 비용 대비 상대적입니다.

두 경우 모두 100 %에 해당하는 실제 값이 ... 예를 들어 무엇인지 모르기 때문에 백분율을 비교하는 것에주의하십시오. TOTAL 실행 비용은 두 번째 경우보다 낮을 수 있습니다.

0

'효과적'을 정의하십시오. 속도가 목표라면 'show client statistics'를 선택하고 적어도 두 번씩 (다른 쿼리 창에서) 쿼리를 실행하고 결과를 평가하십시오.

0

이 두 기술은 논리적으로는 동일하지만 이지만 파서 이 쿼리를 계획하는 방법에 따라 성능 차이가 크게 다를 수 있습니다. 당신은 기술과 을 결정할 때 두 가지 핵심 요소를 고려해야합니다 :

버전
  1. 더 최적화 된 쿼리 계획을 생성합니다.

  2. 더 많은 조인 (INNER 또는 OUTER) 테이블을 통합하려면 나중에 코드를 개조해야하는 경우 코드를 유지 보수해야합니다.

INNER JOIN vs WHERE clause

1

테이블 스캔의는 테이블에있는 모든 단일 행을 읽을 수 있습니다 의미합니다. 일반적으로 실행 계획을 사용하면 가능한 경우 인덱스 등을 사용하여 테이블 스캔을 제거하려고 시도합니다. 일반적으로 테이블 스캔은 느리게 실행되는 쿼리의 주요 원인입니다. 는 SQL을 실행하는 데 걸리는 전체 시간이 약간 감소 테이블 스캔과 첫 번째 쿼리가 20을했다 경우 예를 들어 이전

무엇에 비해 감소하는 경우 (내 경험)

비율의 감소는 단지 개선 10 초가 아닌 초가되면 효과가 없습니다.

물론 쿼리를 최적화하려는 경우 적용하려는 전체 방법이 있습니다.이를 시도하고 개선하는 데 적용 할 수 있습니다. (인덱스 튜닝 마법사는보기 실행 계획을 인덱스 (클러스터/비 클러스터)를 작성 - 등 잠재적 인 병목 현상을 식별 ...)

SQL 최적화 자체에서의 정해진 자세를