--SET STATISTICS IO ON

--SET STATISTICS TIME ON



SELECT

                  PAGELIST.*,

                  DBO.GET_SUBJCLASSNM(PAGELIST.UPPERCLASS, '000') AS SUBJCLASSNM,

                  (CASE

                                   WHEN (SELECT

                                                                                        COUNT(*)

                                                                       FROM TZ_PROPOSE

                                                                       WHERE SUBJ = PAGELIST.SUBJ

                                                                       AND YEAR = PAGELIST.YEAR

                                                                       AND SUBJSEQ = PAGELIST.SUBJSEQ

                                                                       AND USERID = N'chojy314')

                                                     > 0 THEN 'Y'

                                   ELSE 'N'

                  END) AS PROPYN,

                  (CASE

                                   WHEN (SELECT

                                                                                        COUNT(*)

                                                                       FROM TZ_INTERESTSUBJ

                                                                       WHERE USERID = N'chojy314'

                                                                       AND SUBJ = PAGELIST.SUBJ)

                                                     > 0 THEN 'Y'

                                   ELSE 'N'

                  END) AS INTERESTSUBJ

FROM (SELECT

                                   ((TOTALPAGE + 1) - RNUM) AS TNUM,

                                   FLOOR((RNUM - 1) / 10 + 1) AS PAGENO,

                                   10 AS PAGESIZE,

                                   ORG_QUERY.*

                  FROM (SELECT

                                                     ROW_NUMBER() OVER (ORDER BY A.INDATE DESC) AS RNUM,

                                                     COUNT(*) OVER () AS TOTALPAGE,

                                                     A.SUBJ,

                                                     A.SUBJNM,

                                                     A.UPPERCLASS,

                                                     A.TUTOR,

                                                     A.EDUPERIOD,

                                                     A.CONTURL,

                                                     A.ISNEW,

                                                     A.ISHIT,

                                                     A.ISRECOM,

                                                     A.ISMOBILEYN,

                                                     A.INDATE,

                                                     A.EDULIMIT,

                                                     A.EDUTIMES,

                                                     A.ISMEMBERSHIP,

                                                     B.YEAR,

                                                     B.SUBJSEQ

                                   FROM TZ_SUBJ A

                                   INNER JOIN TZ_SUBJSEQ B

                                                     ON A.SUBJ = B.SUBJ

                                   WHERE 1 = 1

                                   AND B.GRCODE = 'N000003'

                                   AND B.YEAR = '0000'

                                   AND A.ISONOFF = 'N'

                                   AND A.ISUSE = 'Y'

                                   AND A.ISVISIBLE = 'Y'

                                   AND dbo.to_date(GETDATE(), 'yyyymmddHH24') BETWEEN B.EDUSTART AND B.EDUEND

                                   ORDER BY A.INDATE DESC OFFSET 0 ROWS FETCH NEXT 10 ROWS ONLY) ORG_QUERY) PAGELIST

WHERE 1 = 1

ORDER BY PAGELIST.RNUM

 


증상 : 이 쿼리를 실행하면 reads 는 13555 밖에 안되는데 4초이상 걸려버림. cpu도 4초이상.

      해당 쿼리를 개발에서 실행하면 또 빠름.


원인 : 개발과 운영의 실행시간이 다른것은 잘 모르겠으나 근본적인 문제가 있음.

위에 dbo.to_date(GETDATE(), 'yyyymmddHH24') 부분이 1번만 실행될줄 알았는데 resultset 갯수만큼 실행됨.


해결책 : 문제 부분을 tsql 변수로 처리해서 쿼리 윗부분에 변수 값 세팅하고 대체하는 방법


결과 : 0.1초 



+ Recent posts