안녕하세요. 업데이트 쿼리 질문 드립니다.
프로세스는 집계-> 업데이트 입니다.
로그 테이블에 없는 애들은 집계에 안잡혀서 OUTER 조인으로 없는 것들은 0으로 해서 만들고자 이렇게 했습니다.
INSERT INTO @TOTAL_RECOM (ID,TOTAL_RECOM)
SELECT A.USERID,ISNULL(B.TOTAL_RECOM,0)
FROM
(
SELECT NM_RECOM_USER,COUNT(*)AS TOTAL_RECOM
FROM DBO.로그테이블 WITH(NOLOCK)
WHERE SD_RECOM_DATE >= @SD_START_DATE AND SD_RECOM_DATE <= @SD_END_DATE
GROUP BY NM_RECOM_USER
)B
RIGHT JOIN
DBO.유저정보 테이블 AS A WITH(NOLOCK)
ON A.USERID = B.NM_RECOM_USER
이렇게 테이블 정보를 집계하고 있습니다. 이렇게 하면 유저 정보 테이블과 RIGHT 조인해서
있는것들은 집계해서 값을 구해서 TEMP테이블에 넣고 없는것들은 0으로 TEMP에 넣습니다.
그 후에
UPDATE DBO.유저정보 테이블
SET NO_RECENT_RECOM = T.TOTAL_RECOM
FROM @TOTAL_RECOM AS T
WHERE USERID = T.ID
이렇게 업데이트 하고자 합니다.
저는 이렇게 생각되는데
더욱 좋은 방법으로 처리가 가능한지 궁금합니다.
인덱스도 걸어서 타긴 하는데 다른 방도가 있을까요?
로그집계를 유저테이블에 업데이트를 하시면서 로그에 없는건 0으로 하신다면
다른 방법이라고 하기는 뭐하데 먼저 0을로 전체 업데이트 후 집계조인후 업데이트할수도 있을듯 하고...
테이블변수에 인서트 안하시고 with 절로 해서 그냥 업데이트 날려도 되구요.
업데이트 속도가 늦다면 체크 함 해보세요....