반응형
최근 회사에서 전략과제를 진행하고있는데 시스템 DB 두가지 모두 대량에 트래픽 경험이 없는 회사라서 그런지
단순한 테이블 구조로 나올수있을것같은데 복잡하게 만들어 공유 되고있다보니
... 덕분에 다양한 mssql 에서 제공하는 테이블 관계 함수를 사용하고있어서 공유합니다.
컨텐츠 와 컨텐츠 집계 테이블
컨텐츠 테이블 그리고 컨텐츠 클릭시 카운터 증가되는 테이블이 있다고 가정하겠습니다.
contents
id | subject | description | regDate |
1 | 컨텐츠A | 상세설명A | 2022-01-02 10:00:00 |
2 | 컨텐츠B | 상세설명B | 2022-01-03 10:00:00 |
3 | 컨텐츠C | 상세설명C | 2022-01-04 10:00:00 |
aggregate
id | count | type |
1 | 1 | mobile |
1 | 3 | pc |
해당 쿼리처럼 group by 와 sum을 이용해서 컨텐츠에 해당하는 집계 Row count 를 가져올수도 있고
SELECT
T1.id,
T1.subject,
T1.description,
T1.regDate,
ISNULL(SUM(T2.count),0) as count
FROM contents T1
LEFT JOIN aggregate T2 ON T1.id = T2.id
GROUP BY T1.id,T1.subject,T1.description,T1.regDate
OUTER APPLY 이용해서 처리가능합니다.
SELECT
T1.id,
T1.subject,
T1.description,
T1.regDate,
T3.count
FROM contents T1
OUTER APPLY(
SELECT ISNULL(SUM(T2.count),0) as count
FROM aggregate T2
WHERE T1.id = T2.id
AND T2.type IN ("mobile","pc")
) T3
성능만 보면 group by가 빠를것같긴한데
Syntax 와 분리된 Query 코드레벨로 보면 아래처럼 처리하는것이 좀더 눈으로 보기에는 편한방법인것 같습니다.
운영하다보면 성능보다 직관적인 쿼리로 구성하는것이 더좋을때도 있기때문에
사용하면서 관리가 용이한 방법으로 진행해 보시기 바랍니다.
'Backend 개발자 > StackOverflow' 카테고리의 다른 글
Java Springboot 인텔리J를 단축키를 이용한 빠른 코딩기법 리펙토링 공부하는방법, 클린코드 꿈속 예기인가여? 개발을 잘하는 방법! 어떻게해야 잘할수 있지 (0) | 2023.08.08 |
---|---|
Mssql Row 데이터 체크 유무 boolean 처리, 문자열 자르기 left right substring (0) | 2022.12.13 |
Mssql DISTINCT 대신 서브쿼리 EXISTS 사용하기 (0) | 2022.12.06 |
MSSQL 맥북용 M1 추천 Tool Legacy 분석 Mssql 프로시저 검색하기 (1) | 2022.09.08 |
Mac OS 맥북 Homebrew m1 설치 방법 (0) | 2022.08.30 |