MSSQL 쿼리 속도 이슈 관련 0 1 7,362

by 튼실맨 [SQL Query] MSSQL 실행속도 [2024.09.04 13:33:52]


WITH ORG_TREE AS
(
SELECT D.ORG_NAME ,
D.ORG_ID ,
D.UP_ORG_ID ,
CONVERT(VARCHAR(100), ORG_NAME) AS FULL_ORG ,
1 lvl
FROM ORGANIZATION D
WHERE D.ORDER_NO = 1
UNION ALL
SELECT E.ORG_NAME ,
E.ORG_ID ,
E.UP_ORG_ID ,
CONVERT(VARCHAR(100), OT.FULL_ORG + ' > ' + E.ORG_NAME) AS FULL_ORG ,
lvl + 1 lvl
FROM ORGANIZATION E
INNER JOIN ORG_TREE OT
ON E.UP_ORG_ID = OT.ORG_ID
)

WITH ORG_TREE_SEAR AS (

SELECT D.ORG_ID
FROM ORGANIZATION D
WHERE D.ORG_ID = #{orgId}
UNION ALL
SELECT E.ORG_ID
FROM ORGANIZATION E
INNER JOIN ORG_TREE_SEAR OT ON E.UP_ORG_ID = OT.ORG_ID
)
SELECT A.USER_ID
, B.USER_NAME
, C.ORG_NAME
, CONVERT(VARCHAR, A.CONNECT_DATE, 120) AS CONNECT_DATE
, A.USER_TYPE
, A.USER_IP
, A.SSO_ID
, G.FULL_ORG
FROM CONNECT_STAT A
LEFT OUTER JOIN USER B
ON A.USER_ID = B.USER_ID
LEFT OUTER JOIN ORGANIZATION C
ON B.ORG_ID = C.ORG_ID
LEFT OUTER JOIN ORG_TREE G
ON C.ORG_ID = G.ORG_ID
WHERE 1 = 1

AND (
A.CONNECT_DATE BETWEEN CONVERT(datetime, #{searchStDate} + ' 00:00:00', 120)
AND CONVERT(datetime, #{searchEnDate} + ' 23:59:59', 120)
)
ORDER BY CONNECT_DATE DESC
OFFSET 0 ROWS FETCH NEXT 91256 ROWS ONLY;

 

우선 쿼리는 이렇구요

로컬컴퓨터에서 실행했을 때는 실행속도가 얼마 안 걸렸습니다.

근데 운영 리눅스 서버에서 실행하니 실행속도가 3분이 넘어가더라구요

이 쿼리를 속도를 향상시킬 수 있는 방법이 있을까요?? ㅠ

by 아발란체 [2024.09.05 14:09:34]

사용자가 많다면 서브 쿼리를 이용하면 조금 개선이 될 거 같습니다.

 

서브 쿼리에서 인라인뷰가 아닌 스칼라 서브쿼리를 쓰면

중복이 많은 조직도 같은 경우 한번 탐색한 것은 메모리 이용하여 탐색 시간이 줄 거 같구


사용자 이름은 유일 값이라 스칼라 효과 없을 거 같구

 

조직도 관련 테이블이 많이 보이는데

재귀함수 써서 조직 테이블을 1번만 조회하면 좋을 거 같구


CONNECT_STAT  이 테이블은 히스토리 성격을 가지고 있는 거 같은데
운영에서 특성 타는 부분이 이 테이블이 운영 환경에서는 데이터가 많아 발생하지 않을까 합니다.
특히 해당 테이블 유일한 조건인 CONNECT_DATE  항목이 인덱스를 잘 타고 있는지 체크가 필요해보입니다

 

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입