1

SQL Server 2005에 저장 프로 시저가 있습니다. 테이블 함수에서 가져 오는 것으로 두 개의 조인이 있습니다. 로드 테스트를 사용하여 쿼리를 실행하면 16 코어 전체에서 CPU가 100 % 종료됩니다! 조인 중 하나를 제거하면 쿼리를 올바르게 실행할 수 있지만 CPU에 과세됩니다.SQL Server 다중 조인은 CPU에 부담입니다.

어떤 도움을 받으실 수 있습니다. 같은 서버의 다른 데이터베이스에있는 동일한 테이블에서 조인이 발생하고 있습니다.

+1

쿼리 실행 계획을 게시 할 수 있습니까? SET SHOWPLAN_TEXT ON – Andomar

답변

2

이것은 문제를 밝힐 수 있습니다. 첫 번째 가입을 CTE로 분리 할 수 ​​있습니까? 이 같은

뭔가 :

또한

 
with FirstJoin(SKey,EID) as (
    select a.Skey,a.EID from 
     dbo.tfnGetLatest(@ID) a 
     left join [STAGING].dbo.RefSrvc b on a.LID = b.ESIID 
)

select Skey from FirstJoin fj left join [STAGING].dbo.RefSrvc c on fj.EID = c.ESIID

, 왼쪽 조인 모두가 결과 세트를 좁히려면 어떻게 결합하기 때문에? 이 쿼리가 select sKey from dbo.tfnGetLatest(@ID)과 일치하지 않습니까?

+0

TF 및 조인에서 하나의 레코드 만 가져옵니다. –

+0

이것은 도움이되지 않았다. 고마워. –

+0

하나의 레코드이고 dbo.RefSrvc가 문제의 행에 대해 인덱싱 된 경우 왼쪽 조인 대신 두 개의 subselect를 시도해야합니다. –

0

그럼 실행 계획의 차이점은 무엇입니까? 심지어 색인을 사용하고 있습니까?

UNION을 모두 대신 사용하려고 했습니까? (현재 얻으려고하는 것은 현재 ID가없는 다른 ID가있는 레코드입니다. 모든 ti woudl은 전체 목록입니다. SKEY 값은,이 인덱스를 사용하지 않는 경우

Select 
    SKey 
From 
    dbo.tfnGetLatest(@ID) a 
    left join [STAGING].dbo.RefSrvc b on 
     a.LID = b.ESIID 
union all 
Select 
    SKey 
From 
    dbo.tfnGetLatest(@ID) d 
    left join [STAGING].dbo.RefSrvc c on 
     d.EID = c.ESIID 

아직도 효율적하지 않을 수 있습니다). 그것을 위해 모든 가입 할 필요는 없지만 아마 더 나은 레코드를 반환합니다.

또는 테이블 평가 된 함수에서 반환 된 값을 인덱싱 할 수있는 temp 테이블에 넣은 다음 조인을 수행하는 것이 좋습니다.

+0

이것은 wierd 일입니다. 이것은로드 테스트 또는 프로덕션에서만 발생합니다. 쿼리 자체는 1 초 이내에 실행됩니다. 로드 테스팅을 할 때 4 개의 XEON 쿼드 코어를 100 % 사용하기 전에 20 명의 사용자를 확보 할 수 없습니다. 하나의 조인을 제거한 상태에서 2000 명 이상의 사용자에게 잘 처리했습니다. 질문에 대답하기 위해 실행 계획이 변경되어 하나가 줄어들지만 전체적으로 동일하게 유지됩니다. 그것은 질문에있는 테이블에 대한 클러스터 된 인덱스 탐색과 테이블 함수에 대한 테이블 스캔을 사용합니다. –

+0

TF 및 조인에서 하나의 레코드 만 가져옵니다. –

+0

유니언은 하나만 필요할 때 두 개의 레코드를 가져오고, 다중 조인은 서로 다른 두 개의 ID에서 데이터를 가져오고 있습니다. –

0

약간의 샘플 출력으로 훨씬 더 명확 해졌지만 뛰어 올랐습니다. dbo.tfnGetLatest(@ID) 수익을 수행하고 인라인 테이블 값 또는 다 문 무엇

SELECT SKey FROM dbo.tfnGetLatest(@ID) 
WHERE LID IN 
    (SELECT ESIID from [STAGING].dbo.RefSrvc) 
AND EID IN 
    (SELECT ESIID FROM [STAGING].dbo.RefSrvc) 
관련 문제