2011-05-13 5 views
0

매우 느리게 실행되는 저장 프로 시저가 있습니다. 따라서 별도의보기에서 일부 쿼리를 추출하고 싶습니다. - 즉 ◎ 인증서테이블 변수 대 조인보기

DECLARE @tmpTable TABLE(..) 

INSERT INTO @tmpTable (..) *query* (returns 3000 rows) 

Select ... from table1 
inner join table2 
inner join table3 
inner join @tmpTable 
... 

그때 추출 (복사 - 붙여 넣기)를 * 쿼리 * 및 뷰에 넣어 :

내 코드는 다음과 같이 보입니다.

이렇게하면 다음 날 다른 결과를 줄 것이다 :

Select ... from table1 
    inner join table2 
    inner join table3 
    inner join vView 
    ... 

왜? vView와 @tmpTable 모두 3000 행을 반환하므로 일치해야합니다 (확인을 위해 제외 쿼리도 수행함). 나는이 꽤 붙어 느낌으로

대한 의견이 훨씬 appriciated 될 것이다 ..

편집 :

이것은 (@tmpTable 결과를 얻기를위한 전체 쿼리를 사용하거나 ◎ 인증서 나에게 다른 결과를 제공하지만, 동일하게 나타남) :

select dep.sid as depsid, dep.[name], COUNT(b.sid) as possiblelogins, count(ls.clientsid) as logins 
from department dep 
inner join relationship r on dep.sid=r.primarysid and r.relationshiptypeid=27 and r.validto is null 
inner join [user] u on r.secondarysid=u.sid 
inner join relationship r2 on u.sid=r2.secondarysid and r2.validto is null and r2.relationshiptypeid in (1,37) 
inner join client c on r2.primarysid=c.sid 
inner join ***@tmpTable or vView*** b on b.sid = c.sid 
left outer join (select distinct clientsid from logonstatistics) as ls on b.sid=ls.clientsid 
GROUP BY dep.sid, dep.[name],dep.isdepartment 
HAVING dep.isdepartment=1 
+1

더 많은 코드와 정보를 제공해 주실 수 있습니까? @tmpTable 쿼리에 WHERE가 있습니까? JOIN이 다른가요? 그것은 "더 많은 행"또는 "duplilcates"입니까? – gbn

+0

Ive는 select 자체를 추가했지만 @tmpTable 및 vView를 빌드하는 쿼리는 내부 조인, 유니온 등을 모두 포함하는 무거운 것이지만 결과 집합은 고유합니다. – femseks

+0

INSERT INTO @tmpTable 코드를 정의하십시오. – gbn

답변

1

이렇게 변경하면보기/표가 필요하지 않을 수도 있습니다.

그것은 client c에 조인하고 서로 다른 결과를 얻을 경우 두 가지 옵션이 있습니다,

그렇지 않으면 단지 logonstatistics

--remove inner join ***@tmpTable or vView*** b on b.sid = c.sid 
--change JOIN 
left outer join (select distinct clientsid from logonstatistics) as ls on c.sid=ls.clientsid 

에 가입하고 SELECT 절에 COUNT(c.sid)COUNT(b.sid)을 변경할 수있을 것으로 보인다 나는 볼 수있다 :

  1. 테이블과 전망에는 다른 자료가있다. line comparsion을 실행 했습니까? 당신이 말한다 "다른 결과가"당신은 당신이 X2 또는 X3 행을 얻을 의미 할 때
  2. 하나, 하나가 마지막으로

(특히이 가입 영향을주는 SID 컬럼) 값을 가지며, NULL이있다? 다른 COUNT 명? 뭐?

+0

INNER JOIN은 행 필터링에도 사용할 수 있습니다. –