질문드릴 내용으로서는 기간별에 대한 문자메시지 발송 통계를 작성하고 싶습니다. 여기에서 MS Sql 변수인 Declare 를 이용하여, 조회를 하니 약 9분정도의 시간이 걸리나, Declare를 사용하지 않는 경우에는 3초이내에 결과가 나옵니다.
쿼리시간을 줄이고 싶은데 어떤 방법을 사용하면 좋을까요?
쿼리문은
-- 조회기간 변수 선언
Declare @S_date varchar(14), @E_date nvarchar(14)
-- 조회기간 설정
set @S_date = '20170425000000' -- 조회 시작 날자
set @E_date = '20170425235959' -- 조회 끝날자
select
부처
, 부서
, SMS Count
, MMS Count
from ( select 부처,부서 from 부서정보테이블 ) 부서정보
left join (select count(sms), 부서정보 from sms테이블 where 발송기간 between @S_date and @E_Date group by 부서정보 )
sms카운터 on 부서정보.부서 = sms카운터.부서정보
left join (select count(sms), 부서정보 from sms테이블 where 발송기간 between @S_date and @E_Date group by 부서정보 )
MMS카운터 on 부서정보.부서 = MMS카운터.부서정보
where sms카운터.부서정보 is Not Null or mms카운터.부서정보 is not null
MS Sql Ver : 2005-9.00.5057.00 입니다.
부서정보 테이블은 뷰테이블입니다.
감사합니다.
Comment 5
-
사야카
2017.04.25 17:17
-
가경승민아빠
2017.04.26 09:21
네 필드 속성은 Varchar(20)이고, 데이터는 YYYYMMDDHHMMSS로 저장되어 있습니다.
-
항해자™
2017.04.27 12:35
변수를 선언해서 사용하면, 통계를 제대로 볼수 없어서 그럴 수 잇습니다,, 프로시저를 사용하신다면 입력변수 그대로 중간에 변형없이 사용해 보세요,,
쿼리문 아래에 option (optimize for(@s_date='2017....',@e_date='2017....')) 를 넣어서 실행해 보셔도 좋습니다,,
... 부분은 위에 기술하신 내용 생략한 거니 채워 넣으세요,, -
가경승민아빠
2017.04.27 17:14
감사합니다.
option (optimize for(@s_date='2017....',@e_date='2017....')) 이게 어떤 의미인지 알 수 있나요?
-
항해자™
2017.04.28 21:51
힌트 입니다~ 자세한건 찾아보시면 자료가 많이 나올꺼에요~
필드속성도 VARCHAR(14) 인가요?