2011-01-28 2 views
1

나는 쿼리가 아래의 쿼리는 5 분 이상 걸리고 있습니다 :다른 실행 시간 SQL 서버

If(Select a from tbl_abc where id in (select id from tbl_xyz where mainid = 12)) 
    BEGIN 
     -- CREATE TEMPORARY TABLE [Say: #temp1] 
#temp1 => Select a from tbl_abc where id in (select id from tbl_xyz where mainid = 12) 
     inserting the same value in the temp table 
     drop #temp1 
    END 

어떤 이유가있을 수 있습니까? 어떻게 해결할 수 있습니까? 나는

+0

왜 IF 문입니까? 너 뭐하려고? – gbn

+0

쿼리 계획과 io/cpu 통계를 확인 했습니까? – sisve

+0

같은 문제에 직면 한 사람들 : 두 가지 답변 [by : binil & by : gbn]이 나를 위해 일했습니다. – Zerotoinfinity

답변

3

는 IF 당신이

If EXISTS (Select a from tbl_abc where id in (select id from tbl_xyz where mainid = 12)) 
    BEGIN 
     -- CREATE TEMPORARY TABLE [Say: #temp1] 
#temp1 => Select a from tbl_abc where id in (select id from tbl_xyz where mainid = 12) 
     inserting the same value in the temp table 

    END 

그러나, 왜 한 번 tbl_abc 및 tbl_xyz를 조회하지 않는 의지 단락 존재? 실제로, 당신은 매개 변수로 저장된 프로 시저에이 값을 전달하는,

Select a 
    INTO #temp1 
    from tbl_abc where id in (select id from tbl_xyz where mainid = 12) 
    IF EXISTS (SELECT * FROM #temp1) /* or use @@ROWCOUNT*/ 
    BEGIN 
    --DoStuff 
    END 
    drop TABLE #temp1 
+0

감사. 나는 그것을 사용했고 그것은 잘 동작하고있다. – Zerotoinfinity

2

declare @Count int 

select @Count = count (a) from tbl_abc where id in (select id from tbl_xyz where mainid = 12) 

if(@Count > 0) 
begin 
    #temp1 => Select a from tbl_abc where id in (select id from tbl_xyz where mainid = 12) 
     inserting the same value in the temp table 
     drop #temp1 
end 

내가 같은 상황을했고, 다음과 같이 해결하려고 asp.net에서 SP를 실행하고 있습니다.

쿼리가 두 번 실행되고 하위 쿼리가 포함되어 있기 때문일 수 있습니다. 이런 쿼리를 실행하는 동안 정확히 무슨 일이 일어날 지 모릅니다. 그러나이 같은 쿼리가 늦어지고 내 문제를 해결 변경

+0

효과적 일지 모르지만 효율적이지 않습니다. 당신은 내 대답 및이 http://stackoverflow.com/questions/3271455/whats-the-best-to-check-if-item-exist-or-not-select-countidor-exist/3271464 당 EXISTS를 사용하고 싶습니다. # 3271464 – gbn

+0

@ gbn 그러나 "존재"를 사용하는 동안 나는 같은 문제를 발견했습니다. 실행하는 데 너무 많은 시간이 걸렸습니다. 하지만 위의 답변처럼 변경하면 정상적으로 작동하기 시작합니다. 나는 이유를 모른다. – Binil

+0

@ gbn을 SQL 서버에 체크인하면 정상적으로 작동합니다. 하지만 내 응용 프로그램에서 그것을 호출하는 동안 지연, 일부 예외를 던지고 점점. 내 테이블에 1000000 개가 넘는 레코드가 포함되어 있습니다. – Binil

0

는 mainid 값은 실제로 하드 (12) 코딩, 또는 이것은 단지 예입니다? 하드 코딩 된 경우 다음을 무시할 수 있습니다.

"12"가 실제로 매개 변수 인 경우 매개 변수 스니핑의 대상이 될 수 있습니다. Here's a question with some useful answers.

언급되지 않은 한 가지 해결책은 매개 변수를 마스크하는 것입니다. 로컬 변수를 선언하고 매개 변수의 값으로 설정하여 쿼리에서 사용하면됩니다.