안녕하세요
초보 개발자입니다.
MS-SQL 속도 튜닝을 하는데 생각처럼 잘 안되서 고수님의 조언을 듣고자 글을 올리게 되었습니다.
------------------------------------------------------------------------------------
SELECT '2008-07-21' AS SDAY,
X.SMINUTE AS STIME, ISNULL(Y.CallCnt, 0) RESULT
FROM TB_MINUTE X WITH (NOLOCK)
LEFT OUTER JOIN
(
SELECT SUBSTRING( CONVERT( VARCHAR, InsertTime, 120), 12, 5) AS SMINUTE,
COUNT(*) AS CallCnt
FROM Message_0721 A WITH (NOLOCK),
Massage_Info B WITH (NOLOCK)
WHERE A.MessageName = B.MessageName AND A.SubMessageName = A.SubMessageName
GROUP BY SUBSTRING( CONVERT( VARCHAR, InsertTime, 120), 12, 5)
) Y
ON X.SMINUTE = Y.SMINUTE
ORDER BY X.SMINUTE
------------------------------------------------------------------------------------
Message_0721 테이블은 21일 하루치 메시지 정보를 가지고 있고, 로우개수는 약 6만건 정도 됩니다.
index 는 MessageName, SubMessageName
Massage_Info 테이블은 고유 메시지 정보를 가지고 있고, 로우개수는 약 1천건 정도 됩니다.
index 는 MessageName, SubMessageName
TB_MINUTE 는 00:00(시:분) ~ 23:59 의 시분 데이터를 가지고 있는 공통 테이블입니다.(로우개수는 1440)
InsertTime은 년-월-일 시:분:초 로 데이터가 들어가있어서 SUBSTRING으로 나누게 되었습니다.
위의 쿼리를 7번 실행시켜
임시테이블에 저장한 뒤 7일치의 데이터를 한꺼번에 가져오는 방법을 사용하고있는데요
UI에서 사용하는데 대략 40초 ~ 1분정도가 소요되네요 ;;;;;
(위의 쿼리만 실행하면 대략 3~4초 3 * 7=28 ㅠㅠ)
5초이내로 줄이고 싶은데
다른 방법으로 쿼리를 해야하는지 아니면 인덱스 문제인지... 고수님의 따스한 조언 부탁드립니다. ㅜㅜ) |