select top 10 수정일,회사명,글번호,구인제목,(select count(*) from 지원이력테이블 c INNER Join 이력서테이블 d ON c.지원번호 = d.이력서번호 where c.글번호=a.글번호) as 통합숫자 from 글테이블 a with(nolock) where 회원아이디='aaa'
식으로 하니 통합숫자 때문에 처리 시간이 오래 걸리네요 이럴때 어떻게 해야 통합숫자를 효율적으로 뽑아낼수 있을까요..
오히려
set rs=dbcon.execute(select top 10 수정일,회사명,글번호,구인제목 from 글테이블 a with(nolock) where 회원아이디='aaa')
를 먼저 뽑고..
do until rs.eof
글번호=rs(0)
select count(*) from 지원이력테이블 c INNER Join 이력서테이블 d ON c.지원번호 = d.이력서번호 where c.글번호=글번호
rs.movenext
loop
식으로 여러번 돌리는게 속도가 빠르던데..
저것도 굉장히 비효율적인 방법인거 같고.. 어떤식으로 뽑아내야 할지 모르겠습니다.
도와주세요..
Comment 3
-
건우아빠
2013.06.27 16:28
-
맨즈밤
2013.06.27 18:01
바깥테이블의 인자값이 서브쿼리 안에서 JOIN 절에 쓰이거나 WHERE절에 쓰이는 경우 (상관관계 하위질의) 전체 결과 row 수만큼 서브쿼리가 반복처리되기 때문에 느립니다. 함수도 그러한 이유로 사용에 매우 조심해야 하는거구요.
건우아빠님 말씀처럼 먼저 인라인뷰로 10건을 가져온후 서브쿼리 또는 LEFT JOIN 으로 값을 가져오시면 될듯합니다.
다만 SQL 서버가 인라인뷰 썼다고 반드시 인라인뷰 먼저 처리되지 않을수도 있기에 실행계획을 확인해보세요. 잘 안되면 마지막에 살포시
OPTION(FORCE ORDER) 놓고 테스트해보심이.....
-
카루카루
2013.06.28 10:16
아 그렇군요 감사합니다.. 말씀해 주신대로 한번 다시 해보겠습니다..!!!
서브쿼리를 써서 카운트를 가져오는 것 보다 먼저 10건을 가져오고(인라인뷰) 그 다음의 서브쿼리를 쓰는 방법으로 하시면
효과가 비슷 할듯 합니다.